Снятие выделения по Esc
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2  Next  :| |:
Total Commander -> Автоматизация Total Commander

#1: Снятие выделения по Esc Author: FlasherLocation: Москва PostPosted: Thu Jan 05, 2017 10:07
    —
Code:
;••••••••••••••••••••••••••••••• 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
}


Last edited by Flasher on Sat Jan 14, 2017 11:39; edited 8 times in total

#2:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Jan 05, 2017 11:17
    —
Flasher
Если упоминается не устраивающий тебя алгоритм TWinKey, наверное, есть смысл привести и устраивающий тебя алгоритм, реализуемый скриптом. В том числе чтобы ни у кого не было не было надобности вникать во все нюансы достаточно длинного обсуждения в теме по TWinKey. Кстати, и пояснение насчёт условия с 9.0+ тут было бы уместым.

#3:  Author: FlasherLocation: Москва PostPosted: Thu Jan 05, 2017 11:29
    —
Avada
Алгоритм самый обычный, не нарушающий стандартное поведение в ТС.
Выделение снимается только не в режиме быстрой фильтрации.

Что именно нужно пояснять в отношении 9.0+?

#4:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Jan 05, 2017 11:58
    —
Flasher
Стандартное поведение TC не предполагает снятие выделения по Esc ни до, ни после снятия фильтра, так что любой дополнительный алгоритм обработки этой клавиши обычным не будет. Это тебе всё понятно, а читающим, возможно, и нет. От более подробного расписывания того, что происходит при очередном нажатии клавиши как в условиях быстрой фильтрации, так и после закрытия фильтра, была бы только польза. Разумеется, не в шапке скрипта, а в посте, как дополнительное пояснение.
А насчёт пояснения про 9.0+ напоминаю, что в своё время нынешний (а не обратный) алгоритм обработки Esc в TWinKey при быстрой фильтрации был принят из-за невозможности обнаружить со стороны плагина этот режим. Если в новациях девятки что-то позволяет ограничение обойти, надо бы это указать явно.

#5:  Author: FlasherLocation: Москва PostPosted: Thu Jan 05, 2017 12:24
    —
Avada
Стандатное - это не обязательно то, которое предполагает чистый ТС без доп. настроек, а то, которое не нарушает работу этой клавиши в имеющихся условиях. Т.к. в нефильтрованном быстрым поиском режиме никаких назначений по умолчанию нет, то нет и нарушения, как и в случае любого другого хоткея, не занятого самим ТС.

Насчёт новаций мимо. Вариант определения я предлагал в ветке TwinKey. Невозможность и нежелание автора пользоваться таким методом - разные вещи.

#6:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Jan 05, 2017 12:46
    —
Flasher
Говоря коротко, мои предложения у тебя поддержки не получили. Что ж, дело хозяйское.

#7:  Author: FlasherLocation: Москва PostPosted: Thu Jan 05, 2017 13:11
    —
Avada
Предложение добавить небольшое пояснение в первый пост я не отклоняю. Тут ещё с AutoRun ситуация, так что пока откладывается.

А ты бы лучше проверил работу при отключённых "аналогах".

#8:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Jan 05, 2017 13:33
    —
Flasher
Проверил. Да, работает. Но, запустивши скрипт, потом этот режим выделения, если захочется, отключить оказывается не так-то просто. А при использовании TWinKey при такой последовательности действий приходится ещё и файловые группы отключать, иначе при снятии фильтра выделено окажется совсем не то, что следует. К тому же я привык, что по Esc можно и восстанавливать выделение. Так что ничего против не имею, но эта методика, скорее всего, не для меня.

#9:  Author: FlasherLocation: Москва PostPosted: Thu Jan 05, 2017 14:09
    —
Avada wrote:
Но, запустивши скрипт, потом этот режим выделения, если захочется, отключить оказывается не так-то просто.
Что ты имеешь в виду?
Avada wrote:
А при использовании TWinKey при такой последовательности действий приходится ещё и файловые группы отключать, иначе при снятии фильтра выделено окажется совсем не то, что следует.
Снятие фильтра здесь - это тот же Esc, что и в ТС по умолчанию. Если TwinKey с ним себя ведёт неоднозначно, то считай, что это его баг.
Avada wrote:
К тому же я привык, что по Esc можно и восстанавливать выделение.
Я давно уже отвык, т.к. ранее заменял на упрощённый вариант, отключив опцию, надоел костыль с двух/трёхкратным нажатием. Впрочем, восстановление добавить не проблема, если мой вариант станет более приемлем. Ты, полагаю, сам видел в обсуждении, как много я писал о том, чтобы добиться более качественного поведения.

И да. А в чём плюс восстановления выделения? Да в том, что выделенные объекты можно увидеть без фильтрации (т.е. с уже иным расположением). В моём же случае это уже есть, так как выделение не сбрасывается в момент сроса фильтрации. По мне это ещё удобней.

#10:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Jan 05, 2017 14:28
    —
Flasher wrote:
Что ты имеешь в виду?

Активный неубитый процесс, естественно. То ли AHK закрывать приходится, то ли скомпилированный экзешник, смотря по тому, в каком виде скрипт использовать.

Flasher wrote:
Снятие фильтра здесь - это тот же Esc, что и в ТС по умолчанию. Если TwinKey с ним себя ведёт неоднозначно, то считай, что это его баг.

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

Flasher wrote:
Впрочем, восстановление добавить не проблема, если мой вариант станет более приемлем. Ты, полагаю, сам видел в обсуждении, как много я писал о том, чтобы добиться долее качественного поведения.

Да, видел. А если можно добавить восстановление выделения (пусть и опционально) — попробуй. Но, скажем, отключать групповую сортировку я не намерен, а с ней в нынешнем виде сохранение выделения вне фильтрации просто теряет смысл. Мне лучше жать два/три раза, чем наблюдать вот это.

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

И почему всё-таки только девятка, а не более ранние версии TC?

#11:  Author: FlasherLocation: Москва PostPosted: Thu Jan 05, 2017 15:27
    —
Avada wrote:
Активный неубитый процесс, естественно. То ли AHK закрывать приходится, то ли скомпилированный экзешник, смотря по тому, в каком виде скрипт использовать.
А, ну я их убиваю через Autorun (пример снизу). Можно, конечно, любой хоткей на закрытие прописать, например, 3 сек. удержание Esc. Или сделать, чтобы завершался с повторого запуска. Как лучше?

С групповой сортировкой позже попробую разобраться. Пока не проверял.

Avada wrote:
А плюс восстановления выделения по ESC в том, что эта методика применяется далеко не только при выходе из режима фильтрации.
Это понятно, но, ИМХО, в TwinKey оно делалось из указанных мной соображений.

Avada wrote:
И почему всё-таки только девятка, а не более ранние версии TC?
C новыми WM_USER+50 цель достигается куда более коротким путём в отличии от WM_CopyData.

#12:  Author: Skif_off PostPosted: Thu Jan 05, 2017 15:35
    —
Avada wrote:
И почему всё-таки только девятка, а не более ранние версии TC?

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

Зачем PixelSearch? И почему только TMyListBox?

#13:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Jan 05, 2017 16:48
    —
Flasher wrote:
Или сделать, чтобы завершался с повторого запуска. Как лучше?

Чисто теоретически мне кажется удобнее повторный запуск.

Flasher wrote:
но, ИМХО, в TwinKey оно делалось из указанных мной соображений.

В том числе, но не только.

Про девятку понял, спасибо.

#14:  Author: FlasherLocation: Москва PostPosted: Fri Jan 06, 2017 11:38
    —
Avada wrote:
Если выделение по ESC в TWinKey не включено и скрипт не используется, то выделение, сделанное в режиме фильтрации, нормально сохраняется при включённой групповой сортировке и при стандартном выходе из фильтрации.
А что с прикреплёнными объектами? С ними у меня всё время выделение меняется c дефолтным Esc.

#15:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Jan 06, 2017 11:51
    —
Flasher
Да, с этим были и есть вполне предсказуемые проблемы, не только при быстрой фильтрации. Выделение и прикрепление объектов в некоторых моментах не очень дружат. Но при использовании ESC по методике TwinKey с последующим восстановлением выделения проблем нет.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2  Next  :| |:
Page 1 of 2

Powered by phpBB © 2001, 2005 phpBB Group