Снятие выделения по Esc

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

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

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

Снятие выделения по Esc

Сообщение Flasher »

  • При использование быстрой фильтрации [ Настройка: Быстрый поиск > Буква (с диалогом поиска) ] стандартное назначение на Esc комадны cm_ClearAll не даёт возможность вернуться к нефильтрованному списку, как это происходит по умолчанию. Задавался ранее этим вопросом здесь (п. 5) и здесь.
    Поскольку запрошенная реализация в Twinkey меня не устраивает, набросал скрипт:

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

;••••••••••••••••••••••••••••••• AHK ••••••••••••••••••••••••••••••••
; Снятие/восстановление выделения с объектов в активной панели по Esc
; Условие: TC 9.0+. Запускать желательно контентным плагином Autorun.
;••••••••••••••••••••••••••••••••••••••••••••••• Автор: Flasher © •••
#NoEnv
#NoTrayIcon
ListLines, Off
#KeyHistory, 0
SetBatchLines,-1
#SingleInstance, Off
DetectHiddenWindows, On

If DupComplete() || RegExMatch(StrGet(DllCall("GetCommandLine",Ptr)), "i)\s/(restart|r|force|f)\s")
  ExitApp

DupComplete()
{ WinGet, List, List, % A_ScriptFullPath " ahk_class AutoHotkey"
  Loop % List
    If WinExist("ahk_id" List%A_Index%) != A_ScriptHwnd && R := true
      WinClose
  Return R
}

WinWaitClose, ahk_class TTOTAL_CMD
ExitApp

#IfWinActive, ahk_class TTOTAL_CMD
$Esc::
ControlGetFocus, Class, A
If !InStr(Class, "TMyListBox") || WinExist("ahk_class #32768") || MainMenuFocus()
  SendInput, {Esc}
Else
{ N := SubStr(Class, 0) = 2 ? 1 : 0 
  SendMessage, 1074, % 1006-N, 0,, A 
  Sel := % ErrorLevel 
  SendMessage, 1074, %  8 - N, 0,, A 
  ControlGetPos, x, y, w, h,, ahk_id %ErrorLevel% 
  PixelSearch,,, % x+w-5, % y, % x+w, % y+h/2, 0x333333,, Fast 
  If ErrorLevel 
    PostMessage, 0x433, 52 (Sel?4:9),,, A
  Else
    SendInPut, {Esc}
}

MainMenuFocus()
{ VarSetCapacity(MBI, size := 16 + A_PtrSize*4, 0)
  NumPut(size, MBI)
  DllCall("GetMenuBarInfo", Ptr, WinExist("A"), Int, 0xFFFFFFFD, Int, 0, Ptr, &MBI)
  Return *(&MBI + 16 + A_PtrSize*3) & 1
}
  • При повтроном вызове скрипта AHK-процесс самозавершается, тем самым давая возможность использовать его как инверсную команду-опцию (Вкл/Выкл).
    При отсутствии экземляров TC процесс завершается.
Последний раз редактировалось Flasher Сб янв 14, 2017 10:39, всего редактировалось 8 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Flasher
Если упоминается не устраивающий тебя алгоритм TWinKey, наверное, есть смысл привести и устраивающий тебя алгоритм, реализуемый скриптом. В том числе чтобы ни у кого не было не было надобности вникать во все нюансы достаточно длинного обсуждения в теме по TWinKey. Кстати, и пояснение насчёт условия с 9.0+ тут было бы уместым.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Avada
Алгоритм самый обычный, не нарушающий стандартное поведение в ТС.
Выделение снимается только не в режиме быстрой фильтрации.

Что именно нужно пояснять в отношении 9.0+?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Flasher
Стандартное поведение TC не предполагает снятие выделения по Esc ни до, ни после снятия фильтра, так что любой дополнительный алгоритм обработки этой клавиши обычным не будет. Это тебе всё понятно, а читающим, возможно, и нет. От более подробного расписывания того, что происходит при очередном нажатии клавиши как в условиях быстрой фильтрации, так и после закрытия фильтра, была бы только польза. Разумеется, не в шапке скрипта, а в посте, как дополнительное пояснение.
А насчёт пояснения про 9.0+ напоминаю, что в своё время нынешний (а не обратный) алгоритм обработки Esc в TWinKey при быстрой фильтрации был принят из-за невозможности обнаружить со стороны плагина этот режим. Если в новациях девятки что-то позволяет ограничение обойти, надо бы это указать явно.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Avada
Стандатное - это не обязательно то, которое предполагает чистый ТС без доп. настроек, а то, которое не нарушает работу этой клавиши в имеющихся условиях. Т.к. в нефильтрованном быстрым поиском режиме никаких назначений по умолчанию нет, то нет и нарушения, как и в случае любого другого хоткея, не занятого самим ТС.

Насчёт новаций мимо. Вариант определения я предлагал в ветке TwinKey. Невозможность и нежелание автора пользоваться таким методом - разные вещи.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

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

Сообщение Flasher »

Avada
Предложение добавить небольшое пояснение в первый пост я не отклоняю. Тут ещё с AutoRun ситуация, так что пока откладывается.

А ты бы лучше проверил работу при отключённых "аналогах".
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

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

Сообщение Flasher »

Avada писал(а):Но, запустивши скрипт, потом этот режим выделения, если захочется, отключить оказывается не так-то просто.
Что ты имеешь в виду?
Avada писал(а):А при использовании TWinKey при такой последовательности действий приходится ещё и файловые группы отключать, иначе при снятии фильтра выделено окажется совсем не то, что следует.
Снятие фильтра здесь - это тот же Esc, что и в ТС по умолчанию. Если TwinKey с ним себя ведёт неоднозначно, то считай, что это его баг.
Avada писал(а):К тому же я привык, что по Esc можно и восстанавливать выделение.
Я давно уже отвык, т.к. ранее заменял на упрощённый вариант, отключив опцию, надоел костыль с двух/трёхкратным нажатием. Впрочем, восстановление добавить не проблема, если мой вариант станет более приемлем. Ты, полагаю, сам видел в обсуждении, как много я писал о том, чтобы добиться более качественного поведения.

И да. А в чём плюс восстановления выделения? Да в том, что выделенные объекты можно увидеть без фильтрации (т.е. с уже иным расположением). В моём же случае это уже есть, так как выделение не сбрасывается в момент сроса фильтрации. По мне это ещё удобней.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Flasher писал(а):Что ты имеешь в виду?
Активный неубитый процесс, естественно. То ли AHK закрывать приходится, то ли скомпилированный экзешник, смотря по тому, в каком виде скрипт использовать.
Flasher писал(а):Снятие фильтра здесь - это тот же Esc, что и в ТС по умолчанию. Если TwinKey с ним себя ведёт неоднозначно, то считай, что это его баг.
А вот это я специально проверял. Если выделение по ESC в TWinKey не включено и скрипт не используется, то выделение, сделанное в режиме фильтрации, нормально сохраняется при включённой групповой сортировке и при стандартном выходе из фильтрации. А при выходе со скриптом, мягко говоря, есть проблемы.
Flasher писал(а):Впрочем, восстановление добавить не проблема, если мой вариант станет более приемлем. Ты, полагаю, сам видел в обсуждении, как много я писал о том, чтобы добиться долее качественного поведения.
Да, видел. А если можно добавить восстановление выделения (пусть и опционально) — попробуй. Но, скажем, отключать групповую сортировку я не намерен, а с ней в нынешнем виде сохранение выделения вне фильтрации просто теряет смысл. Мне лучше жать два/три раза, чем наблюдать вот это.

А плюс восстановления выделения по ESC в том, что эта методика применяется далеко не только при выходе из режима фильтрации.

И почему всё-таки только девятка, а не более ранние версии TC?
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Avada писал(а):Активный неубитый процесс, естественно. То ли AHK закрывать приходится, то ли скомпилированный экзешник, смотря по тому, в каком виде скрипт использовать.
А, ну я их убиваю через Autorun (пример снизу). Можно, конечно, любой хоткей на закрытие прописать, например, 3 сек. удержание Esc. Или сделать, чтобы завершался с повторого запуска. Как лучше?

С групповой сортировкой позже попробую разобраться. Пока не проверял.
Avada писал(а):А плюс восстановления выделения по ESC в том, что эта методика применяется далеко не только при выходе из режима фильтрации.
Это понятно, но, ИМХО, в TwinKey оно делалось из указанных мной соображений.
Avada писал(а):И почему всё-таки только девятка, а не более ранние версии TC?
C новыми WM_USER+50 цель достигается куда более коротким путём в отличии от WM_CopyData.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Avada писал(а):И почему всё-таки только девятка, а не более ранние версии TC?
Используются эти фичи. В принципе, их можно заменить, работая непосредственно с окном ТС и ListBox, тогда заработает и с более ранними.

Зачем PixelSearch? И почему только TMyListBox?
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Flasher писал(а):Или сделать, чтобы завершался с повторого запуска. Как лучше?
Чисто теоретически мне кажется удобнее повторный запуск.
Flasher писал(а):но, ИМХО, в TwinKey оно делалось из указанных мной соображений.
В том числе, но не только.

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

Сообщение Flasher »

Avada писал(а):Если выделение по ESC в TWinKey не включено и скрипт не используется, то выделение, сделанное в режиме фильтрации, нормально сохраняется при включённой групповой сортировке и при стандартном выходе из фильтрации.
А что с прикреплёнными объектами? С ними у меня всё время выделение меняется c дефолтным Esc.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Flasher
Да, с этим были и есть вполне предсказуемые проблемы, не только при быстрой фильтрации. Выделение и прикрепление объектов в некоторых моментах не очень дружат. Но при использовании ESC по методике TwinKey с последующим восстановлением выделения проблем нет.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Ответить