Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Снятие выделения по Esc
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Flasher



Joined: 06 Nov 2009
Posts: 11878
Location: Москва

Post (Separately) Posted: Thu Jan 05, 2017 10:07    Post subject: Снятие выделения по Esc Reply with quote

    При использование быстрой фильтрации [ Настройка: Быстрый поиск > Буква (с диалогом поиска) ] стандартное назначение на Esc комадны cm_ClearAll не даёт возможность вернуться к нефильтрованному списку, как это происходит по умолчанию. Задавался ранее этим вопросом здесь (п. 5) и здесь.
    Поскольку запрошенная реализация в Twinkey меня не устраивает, набросал скрипт:
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
}
    При повтроном вызове скрипта AHK-процесс самозавершается, тем самым давая возможность использовать его как инверсную команду-опцию (Вкл/Выкл).
    При отсутствии экземляров TC процесс завершается.

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Sat Jan 14, 2017 11:39; edited 8 times in total
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 8615
Location: Россия, Саратов

Post (Separately) Posted: Thu Jan 05, 2017 11:17    Post subject: Reply with quote

Flasher
Если упоминается не устраивающий тебя алгоритм TWinKey, наверное, есть смысл привести и устраивающий тебя алгоритм, реализуемый скриптом. В том числе чтобы ни у кого не было не было надобности вникать во все нюансы достаточно длинного обсуждения в теме по TWinKey. Кстати, и пояснение насчёт условия с 9.0+ тут было бы уместым.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 11878
Location: Москва

Post (Separately) Posted: Thu Jan 05, 2017 11:29    Post subject: Reply with quote

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

Что именно нужно пояснять в отношении 9.0+?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 8615
Location: Россия, Саратов

Post (Separately) Posted: Thu Jan 05, 2017 11:58    Post subject: Reply with quote

Flasher
Стандартное поведение TC не предполагает снятие выделения по Esc ни до, ни после снятия фильтра, так что любой дополнительный алгоритм обработки этой клавиши обычным не будет. Это тебе всё понятно, а читающим, возможно, и нет. От более подробного расписывания того, что происходит при очередном нажатии клавиши как в условиях быстрой фильтрации, так и после закрытия фильтра, была бы только польза. Разумеется, не в шапке скрипта, а в посте, как дополнительное пояснение.
А насчёт пояснения про 9.0+ напоминаю, что в своё время нынешний (а не обратный) алгоритм обработки Esc в TWinKey при быстрой фильтрации был принят из-за невозможности обнаружить со стороны плагина этот режим. Если в новациях девятки что-то позволяет ограничение обойти, надо бы это указать явно.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 11878
Location: Москва

Post (Separately) Posted: Thu Jan 05, 2017 12:24    Post subject: Reply with quote

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

Насчёт новаций мимо. Вариант определения я предлагал в ветке TwinKey. Невозможность и нежелание автора пользоваться таким методом - разные вещи.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 8615
Location: Россия, Саратов

Post (Separately) Posted: Thu Jan 05, 2017 12:46    Post subject: Reply with quote

Flasher
Говоря коротко, мои предложения у тебя поддержки не получили. Что ж, дело хозяйское.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 11878
Location: Москва

Post (Separately) Posted: Thu Jan 05, 2017 13:11    Post subject: Reply with quote

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

А ты бы лучше проверил работу при отключённых "аналогах".
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 8615
Location: Россия, Саратов

Post (Separately) Posted: Thu Jan 05, 2017 13:33    Post subject: Reply with quote

Flasher
Проверил. Да, работает. Но, запустивши скрипт, потом этот режим выделения, если захочется, отключить оказывается не так-то просто. А при использовании TWinKey при такой последовательности действий приходится ещё и файловые группы отключать, иначе при снятии фильтра выделено окажется совсем не то, что следует. К тому же я привык, что по Esc можно и восстанавливать выделение. Так что ничего против не имею, но эта методика, скорее всего, не для меня.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 11878
Location: Москва

Post (Separately) Posted: Thu Jan 05, 2017 14:09    Post subject: Reply with quote

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

И да. А в чём плюс восстановления выделения? Да в том, что выделенные объекты можно увидеть без фильтрации (т.е. с уже иным расположением). В моём же случае это уже есть, так как выделение не сбрасывается в момент сроса фильтрации. По мне это ещё удобней.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 8615
Location: Россия, Саратов

Post (Separately) Posted: Thu Jan 05, 2017 14:28    Post subject: Reply with quote

Flasher wrote:
Что ты имеешь в виду?

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

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

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

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

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

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

И почему всё-таки только девятка, а не более ранние версии TC?
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 11878
Location: Москва

Post (Separately) Posted: Thu Jan 05, 2017 15:27    Post subject: Reply with quote

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

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

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

Avada wrote:
И почему всё-таки только девятка, а не более ранние версии TC?
C новыми WM_USER+50 цель достигается куда более коротким путём в отличии от WM_CopyData.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Skif_off



Joined: 28 Nov 2012
Posts: 1028

Post (Separately) Posted: Thu Jan 05, 2017 15:35    Post subject: Reply with quote

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

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

Зачем PixelSearch? И почему только TMyListBox?
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 8615
Location: Россия, Саратов

Post (Separately) Posted: Thu Jan 05, 2017 16:48    Post subject: Reply with quote

Flasher wrote:
Или сделать, чтобы завершался с повторого запуска. Как лучше?

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

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

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

Про девятку понял, спасибо.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 11878
Location: Москва

Post (Separately) Posted: Fri Jan 06, 2017 11:38    Post subject: Reply with quote

Avada wrote:
Если выделение по ESC в TWinKey не включено и скрипт не используется, то выделение, сделанное в режиме фильтрации, нормально сохраняется при включённой групповой сортировке и при стандартном выходе из фильтрации.
А что с прикреплёнными объектами? С ними у меня всё время выделение меняется c дефолтным Esc.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 8615
Location: Россия, Саратов

Post (Separately) Posted: Fri Jan 06, 2017 11:51    Post subject: Reply with quote

Flasher
Да, с этим были и есть вполне предсказуемые проблемы, не только при быстрой фильтрации. Выделение и прикрепление объектов в некоторых моментах не очень дружат. Но при использовании ESC по методике TwinKey с последующим восстановлением выделения проблем нет.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group