Страница 9 из 9

Добавлено: Ср дек 06, 2017 12:01
Flasher
ingerard
Надо-то зачем? + На вопрос ответ будет?

Добавлено: Ср дек 06, 2017 12:10
ingerard
Если бы было нужно, то зачем ограничивать поведение?
После пару раз использования скрипта, вдруг позже понял что это тоже необходимо. Если вдруг надо быстро выделить один схожий файл под курсором на другой панели, и чтоб лишить себя лишних нажатий для выделения.

Добавлено: Ср дек 06, 2017 12:18
Flasher
ingerard
Ну, вот и славно. Так что по совпадению относительности? Можно хотя бы один пример такой потребности?

Добавлено: Ср дек 06, 2017 12:46
ingerard
Ну потребность в этом же скрипте есть? А это почти тоже самое, но имена файлов не из буфера берутся, а из выделенных файлов на панели. Если в режиме Branch находит много схожих файлов, то их тоже отмечать, даже если пути разные.

Добавлено: Ср дек 06, 2017 13:14
Flasher
Это не то же самое. Там речь идёт о восстановлении выделения из буфера. А тут о выделении в обеих панелях. Ладно, внёс правку.

Добавлено: Ср дек 06, 2017 14:33
ingerard
Flasher
Пока что все отлично работает, спасибо.

Добавлено: Ср дек 06, 2017 15:34
Flasher
ingerard
Пож-та. В 7 строке S на T заменил. Для результатов поиска нужно смотреть на получатель, а не источник.

Добавлено: Пн сен 24, 2018 03:52
LonerD
Спустя три года обновил свой вариант на AHK.
Ссылка на полную версию скрипта.
Данная версия скрипта работает только под TC 9.0 и более новыми версиями. Благодаря новым возможностям Тотала удалось значительно сократить и оптимизировать код.

[cut="Скрипт"]

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

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Total Commander DreamLair                                           ;
; Script: Selection the same name files and/or dirs in the panels     ;
; Скрипт: Виділення в панелях однойменних файлів та/або каталогів     ;
; Скрипт: Выделение в панелях одноимённых файлов и/или каталогов      ;
; Version: 2.0 (2018.09.24)                                           ;
; Required: Total Commander 9.0+                                      ;
; Tested on: Total Commander 9.21a                                    ;
; Author: LonerD DreamLair.net                                        ;
; Made in Donetsk People's Republic                                   ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Parameter:                                                          ;
;    1) Selection mode:                                               ;
;       1 - all (default); 2 - only files; 3 - only dirs              ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Параметр:                                                           ;
;    1) Метод виділення:                                              ;
;       1 - все (за замовч.); 2 - тільки файли; 3 - тільки каталоги   ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Параметр:                                                           ;
;    1) Метод выделения:                                              ;
;       1 - всё (по умолчанию); 2 - только файлы; 3 - только каталоги ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;

#NoEnv
#NoTrayIcon
#MaxMem 1024
#SingleInstance force
SetBatchLines, -1

Mode = %1%
if Mode not in 1,2,3
  Mode = 1 ; файли і каталоги

ClipSaved := ClipboardAll
Clipboard := ""

if not ( WinExist("ahk_class TTOTAL_CMD") || WinActive("ahk_class TTOTAL_CMD") )
  ExitApp
WinGet, hw_TTOTAL_CMD, ID, A
global hw_TTOTAL_CMD

DllCall("LockWindowUpdate", "uint", hw_TTOTAL_CMD)

TCPanelA := SendMessageTC(1074, 1000, 0, A)
hw_TCPathA := SendMessageTC(1074, 8+TCPanelA, 0, A)
ControlGetText, PathA,, % "ahk_id " hw_TCPathA
PathA := StrReplace(PathA, "\*.*", "\")

hw_TCPathB := SendMessageTC(1074, 11-TCPanelA, 0, A)
ControlGetText, PathB,, % "ahk_id " hw_TCPathB
PathB := StrReplace(PathB, "\*.*", "\")

SendMessage, 1075, 524,,, % "ahk_id " hw_TTOTAL_CMD
SendMessage, 1075, 330 . Mode,,, % "ahk_id " hw_TTOTAL_CMD
SelItems := SendMessageTC(1074, 1004+TCPanelA, 0, A)
if ( SelItems = 0 )
  Goto, Exit

SendMessage, 1075, 2017,,, % "ahk_id " hw_TTOTAL_CMD
FilesA := Clipboard
SendMessage, 1075, 2018,,, % "ahk_id " hw_TTOTAL_CMD
FileListA := Clipboard

SendMessage, 1075, 4006,,, % "ahk_id " hw_TTOTAL_CMD
SendMessage, 1075, 524,,, % "ahk_id " hw_TTOTAL_CMD
SendMessage, 1075, 330 . Mode,,, % "ahk_id " hw_TTOTAL_CMD
if ( PathA = PathB )
  Goto, Exit

SelItems := SendMessageTC(1074, 1007-TCPanelA, 0, A)
if ( SelItems = 0 )
  Goto, NoSelection

SendMessage, 1075, 2017,,, % "ahk_id " hw_TTOTAL_CMD
FilesB := Clipboard
SendMessage, 1075, 2018,,, % "ahk_id " hw_TTOTAL_CMD
FileListB := Clipboard

FileListSel := ""
Loop, Parse, FilesA, `n, `r
{
  CurrentFile := A_LoopField
  Loop, Parse, FilesB, `n, `r
  {
    if ( CurrentFile = A_LoopField )
      FileListSel := FileListSel A_LoopField "`r`n"
  }
}

if ( FileListSel = "" )
  Goto, NoSelection

FileListSelA := ""
FileListSelB := ""
FileListSelX := ""

FileListX := FileListB
Gosub, LoopFilelist
FileListSelB := FileListSelX

FileListX := FileListA
Gosub, LoopFilelist
FileListSelA := FileListSelX

StringReplace, FileListSelA, FileListSelA, % PathA, , All
StringReplace, FileListSelB, FileListSelB, % PathB, , All

Clipboard := FileListSelB
SendMessage, 1075, 2033,,, % "ahk_id " hw_TTOTAL_CMD
SendMessage, 1075, 400 . TCPanelA,,, % "ahk_id " hw_TTOTAL_CMD
Clipboard := FileListSelA

SendMessage, 1075, 2033,,, % "ahk_id " hw_TTOTAL_CMD

Exit:
Clipboard := ClipSaved
ClipSaved := ""
FileListA := ""
FileListB := ""
FileforSel := ""
FileListSelA := ""
FileListSelB := ""
FileListSelX := ""

DllCall("LockWindowUpdate", "uint", 0)
ExitApp

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
LoopFilelist:
Loop, Parse, FileListSel, `n, `r
{
  FileforSel := A_LoopField
  FileLen := StrLen(FileforSel)
  if ( FileLen > 0 )
  {
    Loop, Parse, FileListX, `n, `r
    {
      StringLen := StrLen(A_LoopField)
      SlashSymbol := SubStr(A_LoopField, StringLen - FileLen, 1)
      StringRight, CurrentFile, A_LoopField, FileLen
      if (( StringLen - FileLen > 1 ) && ( SlashSymbol = "\" ) && ( CurrentFile = FileforSel ))
        FileListSelX := FileListSelX A_LoopField "`r`n"
    }
  }
}
Return
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
NoSelection:
  SendMessage, 1075, 524,,, % "ahk_id " hw_TTOTAL_CMD
  SendMessage, 1075, 4006,,, % "ahk_id " hw_TTOTAL_CMD
  SendMessage, 1075, 524,,, % "ahk_id " hw_TTOTAL_CMD
  Goto, Exit
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Total Commander Send Message function            ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
SendMessageTC(TCMsg, wParam, lParam, aControl)
{
  SendMessage, % TCMsg, % wParam, % lParam, % aControl, % "ahk_id " hw_TTOTAL_CMD
  return ErrorLevel
}
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
[/cut]

CaptainFlint:
Спрятал длинный код.