Выделение файлов через один
Select messages from
# through # FAQ
[/[Print]\]

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

#1: Выделение файлов через один Author: antabuLocation: Новосибирск PostPosted: Mon Jun 25, 2012 12:37
    —
Подскажите, пожалуйста, как выделить (или найти), например, все чётные файлы в папке, а то я с явовскими скриптами не в ладах.

 !  CaptainFlint:
Тема перенесена в "Автоматизацию".

#2:  Author: FlasherLocation: Москва PostPosted: Mon Jun 25, 2012 12:59
    —
http://forum.wincmd.ru/viewtopic.php?p=86397#86397

#3:  Author: Mellomann PostPosted: Mon Jun 25, 2012 13:13
    —
Insert + Вниз + Insert + Вниз + Insert + Вниз + Insert + Вниз + ... Laughing

#4:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Mon Jun 25, 2012 13:35
    —
http://powerpro.wincmd.ru/Scripts/MarkStep.htm

#5:  Author: sa PostPosted: Mon Jun 25, 2012 13:37
    —
antabu
Например, скриптом отсюда.

#6:  Author: FlasherLocation: Москва PostPosted: Mon Jun 25, 2012 13:53
    —
sa
Тут речь только о файлах.

#7:  Author: LonerDLocation: Донецк PostPosted: Mon Jun 25, 2012 16:43
    —
Quote:
Тут речь только о файлах.

Возможно, хотя явно и не указано нужно ли выделять только "обычные" файлы или все файлы (включая каталоги, которые являются частным видом файлов).

Ещё вариант, с использованием сторонних утилит, тормознутый, но портабельный, без WSH Helper (может, подойдёт).

#8:  Author: FlasherLocation: Москва PostPosted: Mon Jun 25, 2012 17:59
    —
LonerD
Частный вид тут в контекст не вписывается.
С WSH Helper тоже можно добиться портабл. Wink

#9:  Author: antabuLocation: Новосибирск PostPosted: Tue Jun 26, 2012 06:56
    —
Благодарю откликнувшихся. Поскольку файлы пронумерованы - воспользовался штатными средствами, советом Mellomann один раз, далее сохраняю выделение в текстовый файл и использую его многократно. Если число файлов в папке не превышает первоначальное - всё проходит.

#10:  Author: sa PostPosted: Tue Jun 26, 2012 16:28
    —
antabu wrote:
(или найти)
Можно сохранить шаблон поиска со строкой “Искать файлы:” вида IMG_\d*[02468]\.JPG и с галкой для “Рег. выраж.” Затем кнопкой с командой LOADSEARCH Имя шаблона находить нужные файлы и выводить их на панель. (В моём примере ищутся фото с чётными номерами: IMG_0002.JPG, IMG_4.JPG и т.п.)
P.S.
Этот же шаблон можно использовать и для выделения, и в качестве фильтра.

#11:  Author: sa PostPosted: Mon Feb 09, 2015 21:39
    —
Предложение от Mellomann
Quote:
Insert + Вниз + Insert + Вниз + Insert + Вниз + Insert + Вниз + ... Laughing
+ утилита TCFS2 навеяли кнопку:
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "run_item(locktc,1) tcm(524)
loop(@<=1000 + send(`{INSERT}{DOWN 1}`)) run_item(locktc,0) redraw"
WCMICONS.DLL,39
Выделить элементы (числом не более указанного после @) с заданным интервалом (число после DOWN), начиная с элемента под курсором


-1
В конце списка может потребоваться ручная правка, поскольку последний элемент может быть выделен/невыделен ошибочно.

#12:  Author: helb PostPosted: Thu Feb 19, 2015 18:52
    —
Я тоже, кстати, не пользуясь всяким внешним софтом, сделал простенький скрипт (подобный вроде где-то в общей теме по скриптам пробегал):
Выделяем всё с первого по последний, запускаем скрипт, и он жмет нужные клавиши за нас, снимая выделение с ненужных файлов. Выделение должно быть сплошным (хотя, думаю, иное решаемо с помощью cm_ShowOnlySelected и cm_SaveSelection). Для работы нужен назначенный хоткей для cm_GotoNextSelected, чтобы переходить к началу выделения. Единственное, не будет корректно выделять там где первый пункт не «..» (в корне), и выделение начинается с него, но это на практике особо смысла и не имеет.
Code:
' zebra-mark.vbs (by helb)
' Помечает выделенные подряд файлы через один.
' В TC должен быть назначен хоткей на cm_GotoNextSelected (в данном случае Ctrl+Home), и, соответственно, указан в скрипте (^{Home}) (Ctrl=^,Shift=+,Alt=%)
' TC Parameter: %L
set FSO = CreateObject("Scripting.FileSystemObject")
set list = FSO.OpenTextFile(WScript.Arguments(0), 8, false)
cnt = list.line - 1
if cnt < 2 then WScript.Quit
with WScript.CreateObject("WScript.Shell")
   'go to first selected: Home & cm_GotoNextSelected
   .SendKeys "{Home}^{Home}"
   cnt = cnt / 2
   for i = 1 to cnt
      .SendKeys "{Down}{Insert}"
   next
end with

#13:  Author: FlasherLocation: Москва PostPosted: Thu Feb 19, 2015 18:59
    —
helb wrote:
подобный вроде где-то в общей теме по скриптам пробегал
Ссылки на скрипты и так все собраны в этой теме.

#14:  Author: sa PostPosted: Fri Feb 20, 2015 10:25
    —
helb
Заметил, что выделение сбрасывается в системных папках и при показе только выделенных объектов. В последнем случае сбрасывается и сам режим показа только выделенных.
Наверное, это плата за параметр %L…

#15:  Author: helb PostPosted: Fri Feb 20, 2015 12:32
    —
Да, из-за передачи листа происходит рефреш, и если что-то изменилось, выделение сбрасывается. Для отфильтрованной панели это всегда так.
Можно в конце после цикла
Code:
.SendKeys "<хоткей для cm_SaveSelection>"
добавить и восстанавливать запомненное выделение после сброса.

Еще вариант не с листом, а списком в командной строке — тут лимит примерно в 2500 файлов, но форсированного обновления нет:
Code:
' zebra-mark.vbs (by helb)
' Помечает выделенные подряд файлы через один.
' В TC должен быть назначен хоткей на cm_GotoNextSelected (в данном случае Ctrl+Home), и, соответственно, указан в скрипте (^{Home}) (Ctrl=^,Shift=+,Alt=%)
' TC Parameter: %s (лимит в ~2500 файлов)
cnt = WScript.Arguments.length
if cnt < 2 then WScript.Quit
with WScript.CreateObject("WScript.Shell")
   'go to first selected: Home & cm_GotoNextSelected
   .SendKeys "{Home}^{Home}"
   cnt = cnt / 2
   for i = 1 to cnt
      .SendKeys "{Down}{Insert}"
   next
end with

#16:  Author: LonerDLocation: Донецк PostPosted: Sat Mar 28, 2015 22:52
    —
Затих что-то я в последнее время... Надо чем-то полезным выделиться.
Скрипт AutoHotkey для выделения зеброй.
При Branch view не работает.
При отображении файлов без каталогов теперь работает!
Зато нет ограничений на количество файлов в каталоге и выделение происходит очень быстро - system32 c около 4000 файлами - за секунду или быстрее; WinSxS с 22000 файлов с длинными именами - за 8-10 секунд.

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

Code:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Script:   SelectionZebra.ahk
; Build:      1.4 (2013.06.11-2015.04.20)
; Author:      LonerD
; OfSite:      http://dreamlair.net
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Выделение объектов в панели зеброю.
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Parameters:
;    1) Selection mode:
;       1 - all; 2 - only files; 3 - only dirs
;    2) Selection position:
;       1 - begin from 1st file; 2 - from 2nd; 10 - from 10th
;    3) Selection range:
;       2 - each 2nd file, 3 - each third file etc
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Параметры:
;    1) Метод выделения:
;       1 - всё; 2 - только файлы; 3 - только каталоги
;    2) Позиция выделения:
;       с какого файла начать выделение (с первого, второго, ... десятого, ... ит.д.)
;    3) Порядок выделения:
;       2 - каждый второй файл, 3 - каждый третий и т.д...
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#NoEnv
#NoTrayIcon
#SingleInstance force
SetBatchLines, -1

Mode = %1%
First = %2%
Range = %3%

If 0 < 3
  Range = 2
If 0 < 2
  First = 1
If Mode not in 1,2,3
  Mode = 1

WinGet, TCHWND, ID, ahk_class TTOTAL_CMD
DllCall("LockWindowUpdate", "uint", TCHWND)

ClipSaved := ClipboardAll
Clipboard := ""

SendMessage, 0x433, 2029,,, ahk_class TTOTAL_CMD
Path := Clipboard . "\"

SendMessage, 0x433, 524,,, ahk_class TTOTAL_CMD
SendMessage, 0x433, 330 . Mode,,, ahk_class TTOTAL_CMD
SendMessage, 0x433, 2021,,, ahk_class TTOTAL_CMD
Sleep, 100
FileList := Clipboard
Sleep, 100

Loop, Parse, FileList, `n, `r
{
  Strings := A_Index
  if ( Strings > 1 )
    Break
}
if ( Strings = 1 )
{
  SendMessage, 0x433, 3321,,, ahk_class TTOTAL_CMD
  SendMessage, 0x433, 2021,,, ahk_class TTOTAL_CMD
  SendMessage, 0x433, 524,,, ahk_class TTOTAL_CMD
  Sleep, 100
  FileList2 := Clipboard
  Sleep, 100
  Loop, Parse, FileList2, `n, `r
  {
    Strings2 := A_Index
    if ( Strings2 > 1 )
      Break
  }
  if ( Strings2 > 1 )
  {
    Loop, Parse, FileList2, `n, `r
    {
      if ( FileList = A_LoopField )
        Goto, Exit
    }
  }
}

SendMessage, 0x433, 524,,, ahk_class TTOTAL_CMD

StringReplace, Path, Path, `\`\, `\, All
StringReplace, FileList, FileList, % Path, , All

FileListSel := ""
Loop, Parse, FileList, `n, `r
{
  if ( Mod(A_Index - First + 1,Range) = 1 )
    FileListSel := FileListSel "`r`n" A_LoopField
}

Clipboard := FileListSel
SendMessage, 0x433, 2033,,, ahk_class TTOTAL_CMD

Exit:
Clipboard := ClipSaved
ClipSaved := ""
FileList := ""
FileListSel := ""

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


Last edited by LonerD on Mon Apr 20, 2015 18:57; edited 11 times in total

#17:  Author: Hjkma PostPosted: Sat Apr 18, 2015 02:45
    —
LonerD
спасибо за скрипт! а если не через один файл, а два? можно ли как-нибудь переделать скрипт под эту задачу?

#18:  Author: LonerDLocation: Донецк PostPosted: Sat Apr 18, 2015 05:43
    —
Hjkma
Пожалуйста.

Через два файла:
заменить
if ( Mod(A_Index,2) = 1 )
на
if ( Mod(A_Index,3) = 1 )
или
if ( Mod(A_Index,3) = 0 )
(соответственно в первом случае выделится 1,4,7 и т.д. файлы, а во втором случае - 3,6,9 и т.д.)

#19:  Author: Hjkma PostPosted: Sat Apr 18, 2015 14:51
    —
LonerD

Большое вам спасибо! Из всех скриптов, который я находил, именно Ваш наиболее удобный и простый в использовании!

#20:  Author: FlasherLocation: Москва PostPosted: Sat Apr 18, 2015 14:56
    —
Hjkma wrote:
наиболее удобный
Это вряд ли. Опций нет. Всё подряд выделяет.

#21:  Author: sa PostPosted: Sat Apr 18, 2015 19:31
    —
Flasher
Кстати, твой скрипт, по ссылке из второго сообщения темы, с опциями 1 (всё) и 3 (только папки) тоже выделяет зеброй все папки, независимо от положения курсора в папках. Так и задумано?

#22:  Author: FlasherLocation: Москва PostPosted: Sat Apr 18, 2015 23:10
    —
Нет, конечно. Там со слэшем на конце какая-то история. Видимо, в тогдашней версии ТС он был не нужен.
Code:
'================================================================
' Выделить с заданным интервалом, начиная с элемента под курсором

' Условие: необходим компонент Script Helper ActiveX for TC

' Параметры: %Z%V <режим выделения> <шаг>
' Режим выделения: 1 - всё; 2 - только файлы; 3 - только папки
' Пример: %Z%V 2 5

' Автор: Flasher ©
'================================================================

Option Explicit
Dim V, Mode, Step, D, FSO, F, P, T1, T, Cl, List, T2, Start, i, n, Sp

With WScript.Arguments
  V = .Item(0) : Mode = .Item(1) : Step = .Item(2)
End With : Set D = CreateObject("Scripting.Dictionary")
Set FSO = CreateObject("Scripting.FileSystemObject")
With CreateObject("TCScript.Helper")
  F = Right(V, 1) : P = .GetSrcPath : V = Left(P, 1) & Mid(V, 2)
  If F = "\" And P <> "" Then P = V Else T1 = 1
  .Pause = 0 : .Wait = True : .LockTC True : T = .GetTextFromClip
  .SendCommand 524, True : If F = "\" Then .SendKeystroke "{DOWN}"
  .SendCommand 2018, True : Cl = .GetTextFromClip
  If Mode = 3 And Right(Cl, 1) <> "\" Then Quit
  .SendCommand 330&Mode, True : List = .GetSrcSelectedFiles(1)
  If Mode = 2 And Right(Cl, 1) = "\" Then Cl = List(0)
  If FSO.FileExists(P) And FSO.GetParentFolderName(V) <> P Then T2 = 1
  If P <> "" Then P = FSO.BuildPath(P, "\")
  If P = "" Or T2 Then Start = Cl Else Start = Mid(Cl, Len(P) + 1)
  If UBound(List) = 0 Then
    If (Right(List(0),1) <> "\" And Mode = 3) Or (Right(List(0),1) = "\" And Mode = 2) Then Quit
  End If : If F = "\" Then .SendKeystroke "{UP}"
  i = 0 : If T1 And T2 Then P = ""
  If P <> "" Then List = Split(vbCr & Join(List, vbCr), vbCr & P)
  For Each F in List : D.Add F, i : i = i + 1 : Next
  If D.Item(Start) = "" Then Start = 1 Else Start = D.Item(Start)
  For n = Start To UBound(List)
    Sp = Sp & List(n) & vbNewLine : n = n + Step
  Next : .SendCommand 524, True : .SetTextToClip(Sp)
  .SendCommand 2033, True : .LockTC False : .SetTextToClip(T)
End With

Sub Quit
  With CreateObject("TCScript.Helper")
    If F = "\" Then .SendKeystroke "{UP}"
    .SendCommand 524, True : .LockTC False : .SetTextToClip(T)
  End With : WScript.Quit
End Sub


Last edited by Flasher on Thu Apr 30, 2015 13:45; edited 21 times in total

#23:  Author: sa PostPosted: Sun Apr 19, 2015 00:08
    —
Flasher wrote:
Там со слэшем на конце какая-то история. Видимо, в тогдашней версии ТС он был не нужен.
Полагаю, что проблема существовала с самого начала: проверил на TC 7.56a – всё точно также.
С новым скриптом появилась ошибка в виде без подкаталогов и не решилась предыдущая проблема при выделении зеброй в архивах.

#24:  Author: FlasherLocation: Москва PostPosted: Sun Apr 19, 2015 01:10
    —
sa wrote:
С новым скриптом появилась ошибка в виде без подкаталогов
Появилась или была? Такая задача изначально не ставилась, поэтому я её не стал реализовывать. Не вижу практической пользы выделять зеброй в таком режиме.
sa wrote:
не решилась предыдущая проблема при выделении зеброй в архивах
С %Z? Для определения типа элемента под курсором как минимум архиватор нужен. Стоит ли с этим заморачиваться? Другой вариант - дублировать имя со слешэм. Т.е. список будет вдвое больше.

#25:  Author: sa PostPosted: Sun Apr 19, 2015 02:04
    —
Flasher wrote:
Появилась или была?
Сообщение об ошибке раньше не выскакивало, а выделение, в самом деле, работало не верно.
Flasher wrote:
Не вижу практической пользы выделять зеброй в таком режиме.
А вот в скрипте от Volniy, на который я ссылался в пятом сообщении темы, этот вопрос решён. Догадаешься, кто поднял вопрос про кривизну срабатывания в таком режиме?

#26:  Author: FlasherLocation: Москва PostPosted: Sun Apr 19, 2015 03:35
    —
sa wrote:
Догадаешься, кто поднял вопрос про кривизну срабатывания в таком режиме?
Поднял не с практической целью, а для информации, чтобы отметить. Ладно, ерунда, сделано.

Проблему архивов тоже решил.

#27:  Author: LonerDLocation: Донецк PostPosted: Sun Apr 19, 2015 18:20
    —
Flasher wrote:
Опций нет. Всё подряд выделяет.

Окей. Теперь есть опции. Можно выбрать выделение файлов/каталогов/всего, можно выбрать с какого файла/каталога начинать выделение и сколько пропускать при выделении.

#28:  Author: FlasherLocation: Москва PostPosted: Sun Apr 19, 2015 19:18
    —
Что-то криво выделяет. То через 3, то через 5, часть подряд, часть не выделено, потом опять, половину каталогов может не выделить, первый параметр вообще ничего не даёт.
"0 - с n-го файла/каталога" - какая-то странная опция. В чём его практический смысл?

#29:  Author: LonerDLocation: Донецк PostPosted: Sun Apr 19, 2015 19:45
    —
Flasher wrote:
Что-то криво выделяет. То через 3, то через 5, часть подряд, часть не выделено, потом опять, половину каталогов может не выделить,


Попробуй перед
Clipboard := FileListSel

Вставить
msgbox, % FileList
msgbox, % FileListSel
(отобразится список всех обрабатываемых файлов/каталогов, а затем список выделяемых)

Случайно не в Branch view выделяешь? Такой вариант не поддерживается.

Flasher wrote:
первый параметр вообще ничего не даёт.

Да, исправил.

Flasher wrote:
"0 - с n-го файла/каталога" - какая-то странная опция. В чём его практический смысл?

Например, нужно выделить каждый третий файл.
При параметре равном 1 выделяются 1, 4, 7, 10 и т.д. файлы.
При параметре равном 0 выделяются 3, 6, 9, 12 и т.д. файлы

Уже не важно. Ещё немного усовершенствовал. Теперь выделение начинается с того файла/каталога, номер которого указан во втором параметре (по умолчанию с первого)

#30:  Author: FlasherLocation: Москва PostPosted: Sun Apr 19, 2015 21:53
    —
LonerD wrote:
отобразится список всех обрабатываемых файлов/каталогов, а затем список выделяемых
Пусто. А с шагом 1 вообще ничего не выделяет.
LonerD wrote:
Случайно не в Branch view выделяешь? Такой вариант не поддерживается.
Не в нём. А что мешает сделать?
LonerD wrote:
Теперь выделение начинается с того файла/каталога, номер которого указан во втором параметре (по умолчанию с первого)
Ну, это же неудобно параметры каждый раз править. Как у меня не хочешь сделать?

#31:  Author: LonerDLocation: Донецк PostPosted: Mon Apr 20, 2015 00:54
    —
Flasher wrote:
Пусто.

AHK последняя? (я юникодовую использую, хотя должна и с Ansi работать)
http://ahkscript.org/download/
Тогда не знаю.
Теоретически 524 - снимает выделение, 330 . Mode выделяет файлы/каталоги, 2021 - копирует в буфер обмена имена с путями, потом содержимое буфера передаётся в переменную FileList. (затем в списке фильтруются лишние строки, он передаётся в буфер, и из буфера загружается выделение).
Попробуй ещё между SendMessage-коммандами вставить паузы...
Sleep, 200 (или другое число в миллисекундах).

LonerD wrote:
А что мешает сделать?

Незнание как это сделать Crying or Very sad . Команда 2033 не загружает выделение при показе без каталогов.
Ага. Понял! Попробую добавить и эту фишку.

Flasher wrote:
Как у меня не хочешь сделать?

Я твой и не смотрел ))
Вроде ж и у тебя режим выделения и шаг параметрами задаются.

#32:  Author: FlasherLocation: Москва PostPosted: Mon Apr 20, 2015 02:07
    —
LonerD wrote:
AHK последняя?
Поставил последнюю - то же самое. Я думаю, дело в цикле.
LonerD wrote:
Незнание как это сделать
У меня мог посмотреть.
LonerD wrote:
Вроде ж и у тебя режим выделения и шаг параметрами задаются.
Посмотри название.

#33:  Author: LonerDLocation: Донецк PostPosted: Mon Apr 20, 2015 05:15
    —
Flasher wrote:
LonerD wrote:
AHK последняя?
Поставил последнюю - то же самое. Я думаю, дело в цикле.

Пока не представляю от чего может зависеть.
Нет, не в цикле, так как ты сказал, что "Пусто". То есть я так понимаю - отображается пустое окошко. А переменная FileList (список всех обрабатываемых файлов/каталогов) в цикле не изменяется.
Попробуй перед циклом вставить
msgbox, % FileList

Единственный нюанс (не знаю как в твоём скрипте) - в моём варианте есть некое ограничение на размер (то ли на количество файлов, то ли и длина имён/путей учитывается). У меня 60 тысяч файлов обрабатываются нормально, а вот более 90 тысяч из каталога WinSxS - не хотять...
Проблема возникает между копированием списка файлов в буфер и отработкой цикла... В чём причина - не могу понять .Увеличение лимита переменной не помогает (хотя дефолтный лимит 64 Мб, а у меня список файлов - меньше 20). Паузы всякие - тоже не помогают...
Команда StringReplace, FileList, FileList, % Path, , All
(удаление пути каталога из списка файлов, чтоб путь остался относительный) - не отрабатывает

Flasher wrote:
У меня мог посмотреть.

Посмотреть мало, надо понять алгоритм. Тут в своих скриптах через некоторое время не разберусь, а в чужом да без комментариев - сходу "не осилил" )).
В итоге разобрался, не знал про такую фишку с выделением. Very Happy

Flasher wrote:
Посмотри название.

Ага, понял, может потом добавлю.

Скрипт обновил. Теперь при отображении файлов без каталогов тоже отрабатывает.

#34:  Author: FlasherLocation: Москва PostPosted: Mon Apr 20, 2015 05:42
    —
LonerD wrote:
Нет, не в цикле, так как ты сказал, что "Пусто".
Пусто - не пусто, а выделение хоть и кривое, но есть. Похоже, что в цикле пропускаются какие-то имена, то ли с цифрами, то ли с какими-то навороченными именами типа как у торрентов.
Пишу первым параметром 3, а он выделяет в DirBranch файл под курсором.
LonerD wrote:
В чём причина - не могу понять .
А ты буферный текст просто записать в какой-нибудь txt можешь?
У меня тоже иногда возникают нестабильности на больших списках. То выделяет как надо, то всё подряд. Проблема в стандартной склейке/разбивке.
LonerD wrote:
В итоге разобрался, не знал про такую фишку с выделением. Very Happy
Я лет 5 назад и сам не знал.

#35:  Author: LonerDLocation: Донецк PostPosted: Mon Apr 20, 2015 17:33
    —
Flasher wrote:
Пишу первым параметром 3, а он выделяет в DirBranch файл под курсором.

А... ну да... Совсем забыл. Если нет выделения - команда 2021 копирует в буфер путь к текущему файлу под курсором, а потом он и обрабатывается соответственно.
Вроде где-то на форуме уже обсуждали как побороть этот нюанс... Да, точно, вот знакомый автор тему создавал.

Flasher wrote:
А ты буферный текст просто записать в какой-нибудь txt можешь?

Попробую.

Добавлено спустя 1 час 51 минуту:

Ну вот, ради такой финтифлюшной проверки пришлось раздуть скрипт в два раза (и єто не предел). А всё потому, что кто-то не добавил в Тотал команду копирования в буфер только выделенных файлов и каталогов...
Обновил скрипт, добавил проверку.

Остаётся открытым вопрос о случае когда в каталоге всего один элемент (файл или каталог) а курсор находится на строке перехода на уровень выше. Или же когда в каталоге нет вообще ничего...
Тогда команда 2021 (Копировать в буфер имена с UNC-путями) вместо того, чтобы скопировать в буфер ничего (то есть просто очистить буфер) высвечивает модальное окошко "No files selected". Как эту дрянь обойти - пока не знаю.
PS. Ёжики зелёные, придумал. Оказывается совсем несложно проверить наличие файла под курсором прежде чем пытаться копировать имена выделенных файлов в буфер обмена (хотя метод и неочевидный). Проверка наличия файлов в каталоге тоже решается несложно средствами AHK.

#36:  Author: FlasherLocation: Москва PostPosted: Mon Apr 20, 2015 21:57
    —
LonerD wrote:
А... ну да... Совсем забыл.
Ты о чём? 3 - это выделение только папок.
LonerD wrote:
Обновил скрипт
Теперь похоже на правду.

#37:  Author: LonerDLocation: Донецк PostPosted: Mon Apr 20, 2015 22:07
    —
Flasher wrote:
Ты о чём? 3 - это выделение только папок.

О том, что мы выделяем каталоги командой 3303. Их при просмотре без каталогов нет, то есть ничего не выделено. Но скрипт об этом не знает, и копирует в буфер имена и пути выделенных элементов командой 2021. Так как выделения нет - то команда копирует имя и путь к файлу под курсором, и скрипт его дальше обрабатывает. Потому и получалось, что при 3 (выделение только папок) выделялся файл.

Сейчас работаю над проблемой с каталогами, в которых один или ноль файлов/подкаталогов. Пытаюсь добиться чтобы Тотал не высвечивал своё окошко. Идею понял, а скомбинировать пока не получается.

#38:  Author: FlasherLocation: Москва PostPosted: Mon Apr 20, 2015 22:16
    —
LonerD wrote:
Так как выделения нет - то команда копирует имя и путь к файлу под курсором, и скрипт его дальше обрабатывает.
А, ну да, я то в своём использую механизм Хелпера, там он берёт только выделенное.

#39:  Author: sa PostPosted: Mon Apr 20, 2015 22:38
    —
Flasher
LonerD
По мне, опция выделения только в файлах, каталогах или повсеместно, притянута за уши. Напомните, если её кто-то запрашивал. Неужели пользователь не в состоянии показать в панели требуемые конкретно ему объекты и уже затем обработать их зеброй? А если ему нужно обработать только какую-то группу файлов или сочетание только определённых папок и файлов? Всё это тянуть в скрипт и заводить кучу кнопок с разными параметрами или оперативно менять параметры кнопки, припоминая, какой по счёту параметр, за что отвечает и что 1 это всё, а 3 - только папки?

#40:  Author: FlasherLocation: Москва PostPosted: Mon Apr 20, 2015 22:54
    —
sa
Это моя инициатива, никем за уши не притянутая. Пользователь в состоянии убрать и отфильтровать, но это лишние движения. А на тот момент вообще про фильтр папок с cd речь не могла идти.
Менять в одной кнопке параметр - это бред. Кто этим вообще занимается? Люди создают меню либо бар в виде меню и там уже - пункты/кнопки с соотв. параметрами и описаниями.

#41:  Author: sa PostPosted: Mon Apr 20, 2015 23:14
    —
Flasher
И под каждый шаг (знать бы ещё, какие шаги потребуются) заводить по 3 кнопки?

#42:  Author: FlasherLocation: Москва PostPosted: Mon Apr 20, 2015 23:18
    —
sa
Это каждый сам определяет для себя. Кому-то одного шага достаточно, кому-то - пары. Или ты предлагаешь каждый раз в окне спрашивать?

#43:  Author: sa PostPosted: Mon Apr 20, 2015 23:28
    —
Я предпочёл бы иметь одну кнопку, в которой изменяемым параметром был только шаг. Никаких наворотов с папками и файлами.

#44:  Author: FlasherLocation: Москва PostPosted: Mon Apr 20, 2015 23:30
    —
Это не навороты, это жизненная необходимость. Я мог бы ещё понять, если бы параметра было 2, а не 3(4). А поскольку это не так, то и говорить тут больше особо не о чем.

#45:  Author: sa PostPosted: Mon Apr 20, 2015 23:39
    —
Если для тебя это жизненная необходимость, то хоть параметры придумай для опции, отличные от размера шага, например A, F, D.

#46:  Author: FlasherLocation: Москва PostPosted: Mon Apr 20, 2015 23:48
    —
sa wrote:
хоть параметры придумай для опции, отличные от размера шага, например A, F, D.
Зачем? В таком случае возникнет необходимость в дополнительных манипуляциях в коде.
Если тебе требуется переиодически менять в самой кнопке шаг (что само по себе странно), то запомни, что он последний и используй клавишу END.

#47:  Author: sa PostPosted: Mon Apr 20, 2015 23:54
    —
Flasher wrote:
В таком случае возникнет необходимость в дополнительных манипуляциях в коде.

Спасибо за разъясянение: я и не догадывался об этом.
Отдельное спасибо за клавишу END – уже нашёл её не клавиатуре.Very Happy

#48:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2015 00:38
    —
sa wrote:
уже нашёл её не клавиатуре.
МолодЭц! Т.е. вопрос решён? Мои поздравления! Mr. Green

#49:  Author: sa PostPosted: Tue Apr 21, 2015 01:12
    —
Flasher
Ещё хотелось бы какую-нибудь клавишу, чтобы в результатах поиска скрипт работал.

#50:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2015 01:18
    —
sa
Сделать-то не проблема, но приведи сперва пример этой "жизненной необходимости".


Last edited by Flasher on Tue Apr 21, 2015 01:52; edited 1 time in total

#51:  Author: sa PostPosted: Tue Apr 21, 2015 01:23
    —
Не иначе, как дополнительные манипуляции в коде потребуются. Тогда не стоит оно того.

#52:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2015 01:29
    —
Ладно, в этой части дополнительные манипуляции лишними не кажутся. Добавил.
Проблема с нестабильностью также, как оказалось, легко решилась.
sa wrote:
Я предпочёл бы иметь одну кнопку, в которой изменяемым параметром был только шаг.
Поменяй местами номера
Quote:
P = .Item(1) : Mode = .Item(0) : Step = .Item(2)
Параметр режима выделения пропиши через пробел после пути к скрипту, а в поле "Параметры:" убери последний и меняй второй (шаг) как вздумается.

LonerD wrote:
Или же когда в каталоге нет вообще ничего...
Тогда команда 2021 (Копировать в буфер имена с UNC-путями) вместо того, чтобы скопировать в буфер ничего (то есть просто очистить буфер) высвечивает модальное окошко "No files selected". Как эту дрянь обойти - пока не знаю.
А какая, собственно, разница, что сообщение выскакивает? Юзер разве не видит, что в папке ничего нет, чтобы что-то там выделять?

#53:  Author: sa PostPosted: Tue Apr 21, 2015 10:11
    —
Flasher
Главное не процитировано: Никаких наворотов с папками и файлами.

А может, правда стоит ещё какую-нибудь инициативу проявить. Например,
параметр номер X: 1 - все файлы, 2 - только программы, <имя> - имя фильтра.
Или параметр номер Y: тип сортировки 0 - по имени, 1 - по типу, 2 - по размеру, 3 - по дате/времени, 4 - без сортировки; с минусом - в обратном порядке. От сортировки содержимое зебры тоже сильно зависит.
Вроде мелочи, зато пользователю не надо делать лишние движения.

Хватит о серьёзном, теперь немножко очередного флуда.
Quote:
Проблема с нестабильностью также, как оказалось, легко решилась.
Хорошая новость!
По-моему vbCr & перед Join не хватает.
Проверь, после cd c:\ и cd C:\ скрипт оба раза выдаёт результат? У меня, пока не привёл в коде строковые данные к одному регистру, в доброй половине пунктов меню избранных каталогов зебра не работала.
Иногда выскакивает сообщение о несоответствии типа Join.

#54:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2015 10:57
    —
sa wrote:
Главное не процитировано: Никаких наворотов с папками и файлами.
Это к чему, не понял?
sa wrote:
... От сортировки содержимое зебры тоже сильно зависит.
Странные шутки у тебя...

sa wrote:
По-моему vbCr & перед Join не хватает.
В данном случае абсолютно непринципиально, т.к. во 2-м цикле далее первый элемент в списке, как бы он не выглядел, будет игнорироваться. Единственное, тут есть смысл убрать i=0, первый элемент коллекции может оставаться и пустым.

sa wrote:
Проверь, после cd c:\ и cd C:\ скрипт оба раза выдаёт результат?
А в чём вообще может быть разница у этих переходов?
sa wrote:
пока не привёл в коде строковые данные к одному регистру, в доброй половине пунктов меню избранных каталогов зебра не работала.
Это, например, каких? Версии системы, Хелпера и интерпретатора в студию. Памятка зовёт.
sa wrote:
Иногда выскакивает сообщение о несоответствии типа Join.
При каких условиях (параметры, элемент под курсором, целевой каталог, файл-список). И я не в курсе, чего ты сам в коде наворотил.

Last edited by Flasher on Tue Apr 21, 2015 12:31; edited 3 times in total

#55:  Author: sa PostPosted: Tue Apr 21, 2015 11:41
    —
Flasher wrote:
абсолютно непринципиально

В виде без подкаталогов первый элемент списка не выделяется, если он принадлежит подпапке.

#56:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2015 12:19
    —
Не подтверждаю. И как всегда поражает твоя избирательность в ответе.

#57:  Author: sa PostPosted: Tue Apr 21, 2015 12:32
    —
Flasher
Конкретно, если в каталоге TC выбрать папку LANGUAGE, нажать Ctrl+Shift+B, затем HOME (на всякий случай) и запустить скрипт, то файл под [..] будет выделен?

#58:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2015 13:25
    —
Не будет. Но это никак не связано с vbCr. Исправил (см. 1-й параметр). vbCr тоже добавил, хотя это на скорости никак не отразится.

#59:  Author: sa PostPosted: Tue Apr 21, 2015 13:58
    —
Quote:
Не будет.
Значит, всё-таки подтверждаешь.
Quote:
Но это никак не связано с vbCr. Исправил (см. 1-й параметр). vbCr тоже добавил,
А зачем добавлял, если не связано?
Quote:
хотя это на скорости никак не отразится.
Кто-то говорил про скорость?

#60:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2015 14:06
    —
sa wrote:
Значит, всё-таки подтверждаешь.
Я имел в виду тест без шифта.
sa wrote:
А зачем добавлял, если не связано?
Затем, чтобы лишнего элемента коллекции не было. И в обновлённом варианте это уже стало необходимостью.
sa wrote:
Кто-то говорил про скорость?
Я пишу, что один элемент погоды не сделает.

#61:  Author: sa PostPosted: Tue Apr 21, 2015 14:19
    —
Quote:
Я имел в виду тест без шифта.
С шифтом или без разницы нет, если первым элементом списка будет файл из подпапки, о чём я уже писал.
Quote:
И в обновлённом варианте это уже стало необходимостью.
Без сомнения!

С файла под курсором везде перестало работать выделение, если он первый в списке.

На вопрос про предыдущую версию скрипта
Quote:
Проверь, после cd c:\ и cd C:\ скрипт оба раза выдаёт результат?
ответа не будет?

#62:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2015 14:32
    —
sa wrote:
С шифтом или без разницы нет, если первым элементом списка будет файл из подпапки, о чём я уже писал.
Я с такого и начал. Там всё нормально было.
sa wrote:
С файла под курсором везде перестало работать выделение, если он первый в списке.
У тебя параметры верно указаны?
sa wrote:
ответа не будет?
Там был вполне осмысленный вопрос, в котором в т.ч. подразумевается ответ, + ещё вопросы. На них ответов не будет?

#63:  Author: sa PostPosted: Tue Apr 21, 2015 14:43
    —
Flasher wrote:
Там всё нормально было.
Есть предположения о причинах разного поведения с шифтом и без?
Flasher wrote:
У тебя параметры верно указаны
Пардон, запутался в вариантах. Вопрос снят.
Использовал последний вариант с убранным ради эксперимента vbCr &.
Flasher wrote:
в котором в т.ч. подразумевается ответ
Значит, не проверял. Спасибо.

Last edited by sa on Tue Apr 21, 2015 15:30; edited 1 time in total

#64:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2015 14:47
    —
sa wrote:
Значит, не проверял.
Как раз наоборот. Я к тому, что зря потратил время на глупость.

#65:  Author: sa PostPosted: Tue Apr 21, 2015 15:06
    —
Flasher wrote:
зря потратил время на глупость.

Если вдруг, ты ещё не сделал эту глупость (проверку) и на последней (редактирование N9) версии, то не трать время: в ней эта проблема счастливым образом разрешилась.

#66:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2015 16:10
    —
sa wrote:
не трать время
Даже и не думал. К тому же ты так и не объяснил, в чём разница.

#67:  Author: sa PostPosted: Tue Apr 21, 2015 16:31
    —
Flasher
Разница всего лишь в том, что после cd c:\ зебра работала, а после cd C:\ нет.
Не работала и после cd %COMMANDER_PATH%, например или cd C:\Wincmd\, а вот после cd c:\wincmd\ всё нормально было.


Last edited by sa on Tue Apr 21, 2015 21:45; edited 1 time in total

#68:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2015 16:37
    —
sa
Чудеса, да и только. А сами элементы в панели отображаются одинаково вне зависимости от этих cd?

#69:  Author: sa PostPosted: Tue Apr 21, 2015 16:43
    —
Flasher
Да. Проблема в параметре или переменной P скорее всего. Поскольку разбивка учитывает регистр, она не проходила.
Проверил: TC возвращает у меня имя диска в том регистре, по которому осуществлялся переход к нему (через cd или переменные окружения), в то время как .GetSrcPath всегда в нижнем.

Добавлено спустя 13 минут:

Всё-таки вопрос с первым в списке снят не во всех режимах работы:
c файла под курсором перестало работать выделение, если он первый в результатах поиска.

#70:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2015 17:35
    —
sa
Да - одинаково, но при этом речь об учёте регистра, который не изменился? Это как?
sa wrote:
TC возвращает у меня имя диска в том регистре, по которому осуществлялся переход к нему
Может, в ТС есть какая-то опция, отвечающая за данное поведение? У меня регистр никак не меняется, поэтому я и спрашивал изначально про разницу.

sa wrote:
c файла под курсором перестало работать выделение, если он первый в результатах поиска.
Всё-таки i=0 я зря забраковал, вернул обратно.

Last edited by Flasher on Tue Apr 21, 2015 17:55; edited 1 time in total

#71:  Author: sa PostPosted: Tue Apr 21, 2015 17:47
    —
Flasher wrote:
Это как?

Зрительно у меня на панели всегда маленькая буква диска, а параметр кнопки ?"%P" показывает разные.

#72:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2015 18:00
    —
Всё, вспомнил. Дело в ключах DrivesExportUpcase и DrivesShowUpcase. У меня там стоит 1.

#73:  Author: sa PostPosted: Wed Apr 22, 2015 10:13
    —
Flasher wrote:
Чудеса, да и только.

С моими чудесами, наконец, разобрались. Кстати они стопроцентно воспроизводились с твоим скриптом (тем что с параметром %P) на TC со стандартными установками.

Что там с твоими: различное поведение с тем же скриптом списков файлов без подкаталогов, полученных по Ctrl+B без шифта и с шифтом. Проблема стабильно воспроизводится? Если да, то это серьёзное упущение и стоит сообщать на оффорум.

#74:  Author: FlasherLocation: Москва PostPosted: Wed Apr 22, 2015 10:55
    —
sa wrote:
Кстати они стопроцентно воспроизводились с твоим скриптом (тем что с параметром %P) на TC со стандартными установками.
Я же выше указал на причину. Зачем ещё раз писать об этом?
sa wrote:
и стоит сообщать на оффорум.
Ты будешь сообщать? В любом случае это уже не по теме.

#75:  Author: sa PostPosted: Wed Apr 22, 2015 11:05
    —
Flasher wrote:
Зачем ещё раз писать об этом?
Может, почаще станешь проверять свои скрипты и на стандартном TC.
Flasher wrote:
Ты будешь сообщать?
Никак нет, я то не сумел воспроизвести проблему.

#76:  Author: FlasherLocation: Москва PostPosted: Wed Apr 22, 2015 11:25
    —
sa wrote:
Может, почаще станешь проверять свои скрипты и на стандартном TC.
В подавляющем большистве случаев в этом нет необходимости. Помимо ТС есть и ряд других нюансов среды.
sa wrote:
я то не сумел воспроизвести проблему
Я условие в соотв. топике опишу, если потребуется.

#77:  Author: sa PostPosted: Wed Apr 22, 2015 11:37
    —
Flasher wrote:
если потребуется.

Точно не мне.

#78:  Author: FlasherLocation: Москва PostPosted: Wed Apr 22, 2015 11:40
    —
Ну-ну.
sa wrote:
это серьёзное упущение и стоит сообщать на оффорум.

#79:  Author: sa PostPosted: Wed Apr 22, 2015 11:45
    —
Flasher
Оставим все лавры обнаружившему проблему.

#80:  Author: FlasherLocation: Москва PostPosted: Wed Apr 22, 2015 12:06
    —
sa
Боюсь придётся их оставить тому, кто посчитал проблему серьёзной.

#81:  Author: sa PostPosted: Wed Apr 22, 2015 12:20
    —
Flasher
Уж нет, лучше тому, кто не ответил на вопрос, как стабильно она воспроиводится.

#82:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Apr 22, 2015 12:22
    —
Flasher
sa
Может быть, вам проблему "кому сообщать и почему" лучше обсудить в ЛС?

#83:  Author: sa PostPosted: Wed Apr 22, 2015 14:17
    —
Flasher
Не считаешь, что условие Abs(UL) >= Abs(Step) лишнее?
А вот Abs(Step) в цикле For n = на всякий случай может, пригодился бы.
Кстати, шаг 0 может оказаться полезным для сплошного выделения от позиции курсора до конца списка.

#84:  Author: FlasherLocation: Москва PostPosted: Wed Apr 22, 2015 14:46
    —
Нет, не считаю.
sa wrote:
может оказаться полезным для сплошного выделения от позиции курсора до конца списка
Code:
TCFS2.exe /ef "tcm(524) send(`+{END}{HOME}`) delay(5) tcm(2053)"

#85:  Author: sa PostPosted: Wed Apr 22, 2015 15:09
    —
Flasher wrote:
Нет, не считаю.
Тогда возникает проблемка, если, конечно это не фича: при шаге, большем количества объектов, выделяются они все.

Flasher wrote:
TCFS2
Не, мне блокировка окна именно в Helper-е нравится, да и сплошное выделение здесь просто бонусом идёт.

#86:  Author: FlasherLocation: Москва PostPosted: Wed Apr 22, 2015 15:40
    —
sa wrote:
при шаге, большем количества объектов, выделяются они все.
Ясно, я при переделках не учёл разницу, там просто нужно было условие слегка поправить. Сделано.
sa wrote:
Не, мне блокировка окна именно в Helper-е нравится, да и сплошное выделение здесь просто бонусом идёт.
Работает вроде.

#87:  Author: sa PostPosted: Wed Apr 22, 2015 16:05
    —
Flasher wrote:
Сделано.

Сильно не помогло: при шаге, большем количества объектов + 2 , выделяются они все. Что мешает выкинуть то?

#88:  Author: FlasherLocation: Москва PostPosted: Wed Apr 22, 2015 16:32
    —
Ладно, выкину, хотя была мысль ещё Else Sp = List(Start) вставить, результат был бы аналогичный.

#89:  Author: sa PostPosted: Thu Apr 23, 2015 15:55
    —
Flasher
Не работает в подпапках файлов архивов, только в головной...

#90:  Author: FlasherLocation: Москва PostPosted: Thu Apr 23, 2015 17:57
    —
sa
Надеюсь, это уже последний штрих (и так уже все рекорды правок перебиты). Проверяй.

#91:  Author: LonerDLocation: Донецк PostPosted: Thu Apr 23, 2015 18:34
    —
Flasher
Собственно, в твоём скрипте те же проблемы, над которыми и я бьюсь.
Вызываю скрипт с параметрами: %Z%V 2 1
1) В панели мы имеем всего один каталог.
Ставим курсор на [..] - Тотал выбивает модальное окошко, что "нет выделенных файлов".
Ставим курсор на каталог - он выделяется (хотя параметрами задано выделение только файлов).
2) В каталоге лежит один файл. Устанавливаем курсор на каталог, выполняем команду 2046 cm_DirBranchSel. Ставим курсор на файл, вызываем скрипт - файл не выделяется.


Last edited by LonerD on Thu Apr 23, 2015 22:03; edited 1 time in total

#92:  Author: sa PostPosted: Thu Apr 23, 2015 21:47
    —
Flasher wrote:
последний штрих

Тогда лучше вернуть вчерашний вариант. Всё-таки он работает со стандартными настройками TC и не сбоит на виде без подкаталогов (когда под курсором оказывается файл из подпапки).

Добавлено спустя 2 часа 57 минут:

LonerD wrote:
2) В каталоге лежит один файл. Устанавливаем курсор на каталог, выполняем команду 2046 cm_DirBranchSel. Ставим курсор на файл, вызываем скрипт - файл не выделяется.
Это следствие ошибки в версии от 23 апр. При наличии нескольких файлов тоже ни один не выделяется. В предшествующем варианте файл выделяется, как положено.

#93:  Author: FlasherLocation: Москва PostPosted: Fri Apr 24, 2015 01:44
    —
LonerD, sa, сейчас проверьте.

#94:  Author: sa PostPosted: Fri Apr 24, 2015 10:30
    —
Flasher
+ В подпапках архивных файлов теперь работает.
+ Затеплилась надежда, что благодаря .SendCommand 524, True исчезнет вопрос с выскакиванием (редким) сообщения о несоответствии типа Join.
- В TC со стандартными установками снова пролезла (видимо через P=V) проблемка с cd C:\ или cd %COMMANDER_PATH% или архивами, в которых буква диска заглавная. Она сказывается только при нахождении курсора на [..] – в этом случае выделение зеброй не срабатывает.
P.S.
Проверяю с некоторых пор в режиме 1 (файлы и папки).

Добавлено спустя 1 час 15 минут:

Вот эта ещё несколько раз выскочила:
Code:
Line:   25
Char:   3
Error:   Несоответствие типа: 'UBound'
Code:   800A000D

#95:  Author: FlasherLocation: Москва PostPosted: Fri Apr 24, 2015 13:44
    —
sa
А теперь?

Ещё поправил проблему, когда каталоги выделялись в режиме 3, если курсор стоял на файле.
Ещё осталась одна проблемка, но я про неё не скажу, если сами не найдёте. Wink

#96:  Author: sa PostPosted: Fri Apr 24, 2015 14:29
    —
Flasher
+ Проблема регистра букв дисков исправлена.

Quote:
но я про неё не скажу,
Вскрываемся? У меня тоже в запасе имеется, только довольно экзотическая (для файлов архивов).

#97:  Author: FlasherLocation: Москва PostPosted: Fri Apr 24, 2015 14:35
    —
sa wrote:
Вскрываемся?
Ладно, уломал. С юникодными именами не сложилось. Embarassed

#98:  Author: sa PostPosted: Fri Apr 24, 2015 14:43
    —
Flasher
В виде без подкаталогов и результатах поиска внутри файла архива почти не работает.

#99:  Author: FlasherLocation: Москва PostPosted: Fri Apr 24, 2015 14:44
    —
sa
Выглядит как "почти беременна". А конкретней?

#100:  Author: sa PostPosted: Fri Apr 24, 2015 14:49
    —
Flasher
В виде без подкаталогов работает только на [..]. В результатах поиска не пашет совсем.

Добавлено спустя 13 минут:

Flasher wrote:
С юникодными именами не сложилось

Кому сильно надо, если файлов не много, могут воспользоваться кнопкой с зеброй на TCFS2 с первой страницы.
Она (кнопка) хоть и жутко медленная, зато всеядная.

#101:  Author: sa PostPosted: Fri Apr 24, 2015 18:20
    —
Flasher
Описка: параметр ожидания , True должен быть расположен не до, а после .SendCommand 2033.
Иногда из-за этого выделение не выполнялось (хотя в буфере уже всё было).
Кстати, разделитель : сильно затрудняет просмотр кода и его изменений.

#102:  Author: FlasherLocation: Москва PostPosted: Sat Apr 25, 2015 03:13
    —
sa wrote:
В виде без подкаталогов работает только на [..].
Исправил. Так случилось, что 18 правка была ознаменована удалением 18 строки. Smile
sa wrote:
В результатах поиска не пашет совсем.
Это не лечится. Разве только частично с именами без путей. Можно Гислеру спокойно сообщать.
sa wrote:
Описка: параметр ожидания , True должен быть расположен не до, а после .SendCommand 2033.
Ты что-то путаешь, у меня там вообще его нет и не было ни до и ни после. Сбоев пока не замечал.
sa wrote:
Кстати, разделитель : сильно затрудняет просмотр кода и его изменений.
Я не спорю, что для других не всегда удобно читать. Не с ликбезной целью выкладываю. Можешь пользоваться массовой заменой на перевод строки, если хочешь. Мне удобно из-за компактности, могу быстрее фокусировать внимание сразу на множестве деталей.

#103:  Author: sa PostPosted: Sat Apr 25, 2015 10:46
    —
Flasher wrote:
Исправил.
+ В файле архива, в виде без подкаталогов работает.
Теперь:
- В файле архива, в обычном режиме, в подпапках работает только на [..].

Flasher wrote:
и не было ни до и ни после
А в твоём исходном скрипте, с которого начался весь сыр-бор, разве не было?
Code:
.SetTextToClip CStr(Sp)
.SendCommand 2033, True

#104:  Author: FlasherLocation: Москва PostPosted: Sat Apr 25, 2015 13:47
    —
sa wrote:
Теперь:
Ага. Исправил.
+ к этому исправлена проблема в режиме "только файлы", когда в подпапке архива первый файл не выделялся, если курсор стоял на папке.
sa wrote:
А в твоём исходном скрипте, с которого начался весь сыр-бор, разве не было?
Разве только в этом.

#105:  Author: sa PostPosted: Sat Apr 25, 2015 14:40
    —
Flasher
Основательно проверить пока времени нет. Как будто работает.

Flasher wrote:
Разве только в этом.
Какое милое признание ошибки (?) Very Happy. Параметр , True после .SendCommand 2033 добавил. А вот , True после .SetTextToClip Sp всё-таки не убрал. Метод SetTextToClip(Text) ещё и параметры поддерживает?

#106:  Author: FlasherLocation: Москва PostPosted: Sat Apr 25, 2015 16:03
    —
sa wrote:
Какое милое признание ошибки (?)
Не признание. Обсуждали здешний исходник, а не старый.
sa wrote:
Метод SetTextToClip(Text) ещё и параметры поддерживает?
Да, как и SendKeystroke, иначе была бы ругать на окончание инструкции.

#107:  Author: sa PostPosted: Sat Apr 25, 2015 16:14
    —
Flasher wrote:
Не признание.
Как-то я тебя не пойму: исправление сделал (ввёл , True после .SendCommand 2033 в последней редакции скрипта), а ошибки не признал.

Flasher wrote:
Да,
И за что он (параметр) отвечает?
Нашёл сам.
Что-то там про параметр True нет слов.

#108:  Author: FlasherLocation: Москва PostPosted: Sat Apr 25, 2015 16:47
    —
sa wrote:
ошибки не признал
Это не связанные вещи. Перед - не через перевод строки, а на той же, что не одно и то же.
sa wrote:
Нашёл сам.
Ага, вот оно что за параметр. Лучше бы автор для GetSrcSelectedFiles его ввёл.

В общем, ты ещё протестируй как следует (без "как будто"), будет почва - поправлю, на результате это в любом случае не отражается.

#109:  Author: sa PostPosted: Sat Apr 25, 2015 23:49
    —
Flasher wrote:
Перед - не через перевод строки, а на той же, что не одно и то же.
Поподробней можно?

Flasher wrote:
Ага, вот оно что за параметр.
Так ты не был не в курсе, для чего параметр, а пытался его использовать?

#110:  Author: FlasherLocation: Москва PostPosted: Sun Apr 26, 2015 01:49
    —
sa wrote:
Поподробней можно?
Под "перед" понимается "до":
sa wrote:
должен быть расположен не до, а после .SendCommand 2033.

sa wrote:
Так ты не был не в курсе, для чего параметр, а пытался его использовать?
Я бы не называл это попыткой. Я его просто использовал.

Тебе кроме разговоров "ни о чём" есть что конкретное по теме добавить?

#111:  Author: sa PostPosted: Sun Apr 26, 2015 10:34
    —
Flasher wrote:
Я его просто использовал.
Не забудь использовать ещё в двух местах, где применён SetTextToClip.

Коли обсуждение содержимого скрипта, считается разговором "ни о чём", то больше у меня слов нет.

#112:  Author: FlasherLocation: Москва PostPosted: Sun Apr 26, 2015 21:59
    —
sa wrote:
Коли обсуждение содержимого скрипта, считается разговором "ни о чём"
Разговор о признании и рассуждения о чьих-то попытках никакой полезной нагрузки не несут совершенно и с обсуждаемым ранее лечением багов не имеют ничего общего.

#113:  Author: sa PostPosted: Mon Apr 27, 2015 09:39
    —
Flasher
Разговоры разговорами, а факты ошибочного неиспользования/использования параметра True в методах SendCommand и SetTextToClip остаются фактами. В первом случае параметр втихую добавил, а во втором, ни к селу ни к городу применив его, всё ожидаешь:
Quote:
будет почва – поправлю
Скорейшего обретения!

#114:  Author: FlasherLocation: Москва PostPosted: Mon Apr 27, 2015 09:55
    —
sa
Ты ещё на этот True раз десять укажи. Про SendCommand так вообще мимо (добавка - это только чтобы тебе угодить, т.к. выше объяснено, что проблем лично мной не обнаружено). Если больше нечего по-настоящему полезного сказать по делу, так не стони, заканчивай с флудом.

#115:  Author: sa PostPosted: Mon Apr 27, 2015 10:19
    —
Flasher wrote:
это только чтобы тебе угодить
А тут ты кому постарался угодить? Да и во всех других применениях SendCommand в актуальном скрипте.
P.S.
Вопрос риторический.

#116:  Author: FlasherLocation: Москва PostPosted: Mon Apr 27, 2015 10:40
    —
Вопрос "кому" некорректен. Всё делалось для должной работоспособности.

#117:  Author: sa PostPosted: Mon Apr 27, 2015 10:45
    —
Flasher wrote:
добавка - это только чтобы тебе угодить

Тогда можешь убрать, как почва будет, а я у себя сам подправлю. Very Happy

#118:  Author: sa PostPosted: Mon Apr 27, 2015 15:38
    —
Flasher
Заодно можешь и во всех других местах убрать, невзирая на то, что
Flasher wrote:
Всё делалось для должной работоспособности.
Всё дело в том, что после того как ты, борясь с нестабильностью (после потерянного параметра в SendCommand 2033), ввёл глобальное свойство .Wait = True, необходимость их упоминания отпала во всех последующих вызовах SendCommand.
Либо наоборот, в командах оставить, а глобальное свойство .Wait = True, которое стало избыточным, убрать.

#119:  Author: FlasherLocation: Москва PostPosted: Mon Apr 27, 2015 15:41
    —
sa wrote:
необходимость их упоминания отпала во всех последующих вызовах SendCommand.
Это нет так. Иди учи матчасть:
ReadMe.txt wrote:
Wait глобальное свойство, которое определяет, будут ли для
отсылки команд Тоталу использоваться ... SendMessage (при установке значения True)

#120:  Author: sa PostPosted: Mon Apr 27, 2015 16:12
    —
Flasher
А вот в этой фразе в описании SendCommand из ReadMe.txt
Quote:
C помощью необязательного параметра Wait можно переопределить параметр ожидания (действует только для данной конкретной команды!)
о каком таком параметре ожидания (который можно переопределить) речь идёт? Разве не о том глобальном?

#121:  Author: FlasherLocation: Москва PostPosted: Mon Apr 27, 2015 16:18
    —
sa wrote:
Разве не о том глобальном?
О нём. А что это меняет?

#122:  Author: LonerDLocation: Донецк PostPosted: Tue Apr 28, 2015 02:01
    —
Обновлённое решение на AutoHotkey.
Работает в большинстве ситуаций (вид без каталогов, архивы, виртуальные панели, один файл/каталог в панели и т.д..).
Не работает в режиме просмотра миниатюр (ограничение Тотала на вызов LB-комманд в этом режиме) и в режиме просмотра результатов поиска в архиве (тоже ограничение)

Code:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Total Commander DreamLair
; Script: Zebra file selection
; Скрипт: Выделение файлов зеброй
; Script version: 3.2.1 (2015.04.30)
; Script author: LonerD
; Made in Donetsk People's Republic
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Parameters:
;    1) Selection mode:
;       1 - all; 2 - only files; 3 - only dirs
;    2) Selection position:
;       1 - begin from 1st file; 2 - from 2nd; 10 - from 10th
;       0 - begin from file under cursor
;    3) Selection range:
;       2 - each 2nd file, 3 - each third file etc
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Параметры:
;    1) Метод выделения:
;       1 - всё; 2 - только файлы; 3 - только каталоги
;    2) Позиция выделения:
;       с какого файла начинать (с первого, второго и т.д...)
;       0 - начинать с файла под курсором
;    3) Порядок выделения:
;       2 - каждый второй файл, 3 - каждый третий и т.д....
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

Mode = %1%
First = %2%
Range = %3%

If 0 < 3
  Range = 2
If 0 < 2
  First = 1
If Mode not in 1,2,3
  Mode = 1

If not ( WinExist("ahk_class TTOTAL_CMD") || WinActive("ahk_class TTOTAL_CMD") )
  ExitApp

ClipSaved := ClipboardAll
Clipboard := ""

WinGet, hw_TTOTAL_CMD, ID, A
ControlGetFocus, aControl, % "ahk_id " hw_TTOTAL_CMD
DllCall("LockWindowUpdate", "uint", hw_TTOTAL_CMD)

SendMessage, 0x433, 524,,, % "ahk_id " hw_TTOTAL_CMD

if ( First = 0 )
{
;  FirstFile := TC_Command("0x188", aControl, 0, 0)
  FirstFile := TC_SendData("SI")
  if ( FirstFile = 0 )
  {
    FirstFileName := TC_SendData("SN")
    if ( FirstFileName = ".." )
      FirstFile := 1
  }
  else
    {
      SendMessage, 0x433, 2021,,, % "ahk_id " hw_TTOTAL_CMD
      FirstFileName := Clipboard
    }
}
else
  FirstFile := First

SendMessage, 0x433, 330 . Mode,,, % "ahk_id " hw_TTOTAL_CMD
SelItems := TC_Command("0x190", aControl, 0, 0)
if ( SelItems = 0 )
  Goto, Exit

Path := TC_SendData("SP")

SendMessage, 0x433, 2021,,, % "ahk_id " hw_TTOTAL_CMD
FileList := Clipboard
Clipboard := ""

if ( SelItems = 1 )
{
  StringRight, Right_Simbol, FileList, 1
  If ((( Right_Simbol = "\" ) && ( Mode = 2 ) ) ||  (( Right_Simbol != "\" ) && ( Mode = 3 )))
  {
    SendMessage, 0x433, 524,,, % "ahk_id " hw_TTOTAL_CMD
    Goto, Exit
  }
}

StringReplace, FileList, FileList, % Path, , All
StringReplace, FirstFileName, FirstFileName, % Path, , All

if ( First = 0 )
{
  if ( Mode = 2 )
  {
    StringRight, Right_Simbol, FirstFileName, 1
    If ( Right_Simbol = "\" )
      FirstFile := 1
  }
  Loop, Parse, FileList, `n, `r
  {
    if ( A_LoopField = FirstFileName )
    {
      FirstFile := A_Index
      Break
    }
  }
}

FileListSel := ""
Loop, Parse, FileList, `n, `r
{
  if ( Mod(A_Index - FirstFile + 1,Range) = 1 )
    FileListSel := FileListSel "`r`n" A_LoopField
}

Clipboard := FileListSel

SendMessage, 0x433, 2033,,, % "ahk_id " hw_TTOTAL_CMD

Exit:
Clipboard := ClipSaved
ClipSaved := ""
FileList := ""
FileListSel := ""
DllCall("LockWindowUpdate", "uint", 0)
ExitApp

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Доп. функция (автор я)
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TC_Command(TCmessage, aControl, Param1, Param2)
{
  global hw_TTOTAL_CMD
  SendMessage, % TCmessage, % Param1, % Param2, % aControl, % "ahk_id " hw_TTOTAL_CMD
  return ErrorLevel
}
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Доп. функция (автор artt)
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TC_SendData(Cmd, CmdType="", msg="", hwnd="")
{
  Critical
  global hw_TTOTAL_CMD
  Static om := OnMessage(0x4a, "TC_SendData"), TC_ReceiveDataValue := "", TC_DataReceived := ""

  If ( (msg=0x4A) and (hwnd=A_ScriptHwnd) )
    Exit ( TC_ReceiveDataValue := StrGet(NumGet(CmdType + A_PtrSize * 2)), TC_DataReceived := "1" )

  VarSetCapacity(CopyDataStruct, A_PtrSize * 3), TC_ReceiveDataValue := 1, TC_DataReceived := ""
  If CmdType in LR,ST
  DirType := CmdType, CmdType := "CD"
  else if ( CmdType = "" )
    CmdType := ( A_IsUnicode ? "GW" : "GA" ), TC_ReceiveDataValue := ""

  If( A_IsUnicode )
  {
    VarSetCapacity(cmdA, StrPut(cmd, "cp0"), 0)
    Loop, % StrLen(cmd)
      NumPut( Asc(SubStr(cmd, A_Index, 1)), cmdA, A_Index - 1, "Char" )
  }
  NumPut( Asc(SubStr(CmdType, 1, 1)) + 256 * Asc(SubStr(CmdType, 2, 1)), CopyDataStruct, 0 )
  NumPut( StrLen(cmd) + (CmdType = "CD" ? 5 : 0), CopyDataStruct, A_PtrSize )
  NumPut( (A_IsUnicode ? &cmdA : &cmd), CopyDataStruct, A_PtrSize * 2 )
  Loop, % ( CmdType=="CD" ? 2 : 0 )
    NumPut( Asc(SubStr(DirType, A_Index, 1)), (A_IsUnicode ? cmdA : cmd), (StrLen(cmd) + A_Index), "Char" )

  SendMessage, 0x4A, %A_ScriptHwnd%, &CopyDataStruct,, % "ahk_id " hw_TTOTAL_CMD

  While ( TC_ReceiveDataValue = "" )
  {
    IfEqual, TC_DataReceived,    1, Break
    IfGreaterOrEqual, A_Index, 500, Break
    Sleep, 10
  }
  Return TC_ReceiveDataValue
}
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Last edited by LonerD on Thu Apr 30, 2015 17:41; edited 9 times in total

#123:  Author: FlasherLocation: Москва PostPosted: Tue Apr 28, 2015 09:06
    —
LonerD
Не, пока кривенько. Возьми 2 0 2, к примеру. Выделение начинается не понять откуда.
В подпапках архивов вообще по нулям (я уж молчу про результаты поиска в архивах - это к "любой ситуации").
Кстати, по скорости моему скрипту уступает.

#124:  Author: LonerDLocation: Донецк PostPosted: Tue Apr 28, 2015 15:33
    —
Flasher
Спасибо, вижу в каких фрагментах скрипта проблема. С архивами, оказывается, не всё так просто. А с файлами - мой косяк, шёл в верном направлении, немного запутался и решил сделать "попроще" (оказалось, не учёл выделение только файлов)...

#125:  Author: LonerDLocation: Донецк PostPosted: Thu Apr 30, 2015 06:11
    —
Обновил скрипт. Вроде исправил все ошибки.
Добавление выделения от курсора и борьба с нюансами Тотала - вылились в необходимость использовать WM_COPYData.

Flasher wrote:
Кстати, по скорости моему скрипту уступает.

Не знаю механизмы работы обоих скриптовых языков и зависимости от мощности компьютера.
Засёк секундомером. На моём Core i7 в Power Saver режиме - оба варианта (твой и мой) на каталоге с 22 тысячами файлов (System32, вид без подкаталогов) отработали за 12-13 секунд, то есть можно сказать идентично.

Кстати, у тебя при параметрах %Z%V 1 1 - если курсор находится на строке [..] - выскакивает докучливое Тоталовское окошко об отсутствии выделения.

#126:  Author: FlasherLocation: Москва PostPosted: Thu Apr 30, 2015 09:01
    —
LonerD wrote:
Вроде исправил все ошибки.
Вроде, да не все. По-прежнему остаётся проблема с 2 0 2, если курсор на папках. Ну, и про поиск в архивах всё молчим. Плюс к этому у тебя в буфере остаётся путь элемента под курсором.
LonerD wrote:
Добавление выделения от курсора и борьба с нюансами Тотала - вылились в необходимость использовать WM_COPYData.
Ну, у меня почему-то не вылились, использовались вполне простые пути решения.
LonerD wrote:
оба варианта (твой и мой) на каталоге с 22 тысячами файлов (System32, вид без подкаталогов) отработали за 12-13 секунд
У меня в этом же каталоге на 14 тыс. файлов мой скрипт срабатывает в среднем за 2,36-2.5 секунды. Твой предыдущий где-то за 3.2-3.5. В папке Windows на 22691 файлов мой - за 9,849609, твой похоже. Если брать небольшое кол-во файлов, то новый твой вариант объективно быстрее предыдущего.
LonerD wrote:
Кстати, у тебя при параметрах %Z%V 1 1 - если курсор находится на строке [..] - выскакивает докучливое Тоталовское окошко об отсутствии выделения.
Ничего подобного. У меня это самый часто используемый режим. Тем более если учесть, что ряд последних правок был привязан к тестам с установкой на данном элементе.

Last edited by Flasher on Thu Apr 30, 2015 11:11; edited 2 times in total

#127:  Author: sa PostPosted: Thu Apr 30, 2015 10:26
    —
Flasher
Моё утверждение
Quote:
Заодно можешь и во всех других местах убрать
строилось на этом описании (в справке) глобального свойства Wait:
Quote:
SendMessage (при установке значения
True). При истинном значении этого свойства всегда ожидается
реакция TC на посланную команду и только при получении результата
передаётся управление в скрипт.
Проверка на объёмах в десятки тысяч файлов показала, что параметр ожидания для отдельных SendCommand всё равно почему-то востребован.
Так что возвращаюсь на шаг назад. Embarassed

#128:  Author: FlasherLocation: Москва PostPosted: Thu Apr 30, 2015 14:00
    —
sa
Оно хоть и строилось на данном описании, но неверно.
Можно везде поубирать True после SendCommand и убедиться, что вообще ничего кроме элемента под курсором выделено не будет даже в папках, где всего 2-3 объекта.

Добавил в скрипт Option Explicit, чтобы ускорить обращение к значимому числу переменных.
С подкаталожными файлами архива в результатах поиска не стал заморачиваться, там при постановке курсора на первом элементе без WM_COPYData, увы, не обойтись.

#129:  Author: sa PostPosted: Thu Apr 30, 2015 14:14
    —
Flasher wrote:
Можно везде поубирать True после SendCommand и убедиться, что вообще ничего кроме элемента под курсором выделено не будет даже в папках, где всего 2-3 объекта.
У меня по-другому: даже в папке Windows, в виде без подкаталогов (~17000 файлов), работает.

#130:  Author: FlasherLocation: Москва PostPosted: Thu Apr 30, 2015 14:15
    —
С трудом верится, но тут только и остаётся пожать плечами.

#131:  Author: sa PostPosted: Thu Apr 30, 2015 14:30
    —
Flasher
Я надеюсь, что глобальное .Wait = True ты сохранял при этом?

#132:  Author: FlasherLocation: Москва PostPosted: Thu Apr 30, 2015 14:49
    —
sa
Я делал ровно то, что написал. Всего 4 замены.

#133:  Author: sa PostPosted: Thu Apr 30, 2015 14:54
    —
Flasher
У меня 6. Интересно, мы про один скрипт говорим? Я даже 21 редакцию проверил.

#134:  Author: FlasherLocation: Москва PostPosted: Thu Apr 30, 2015 15:03
    —
Если 4, то выделит 1 элемент, если 5-6, то - 0.

#135:  Author: sa PostPosted: Thu Apr 30, 2015 15:18
    —
Flasher
Ну и ну! Вечером попробую ещё на семёрке (сейчас на XP).
Спасибо, что все три SetTextToClip стали теперь единообразными!

#136:  Author: FlasherLocation: Москва PostPosted: Thu Apr 30, 2015 15:23
    —
sa wrote:
Спасибо, что все три SetTextToClip стали теперь единообразными!
Нашёл чему радоваться. Как будто я тебе портабл-Хелпер скинул. Very Happy

#137:  Author: sa PostPosted: Thu Apr 30, 2015 15:32
    —
Flasher wrote:
Нашёл чему радоваться.

Почти неделю дожидался! Very Happy

#138:  Author: FlasherLocation: Москва PostPosted: Thu Apr 30, 2015 15:42
    —
Ого, так долго ждал, что забыл даже об этом упомянуть. Куда там всяким портабл до этого великого нужника! Mr. Green

#139:  Author: sa PostPosted: Thu Apr 30, 2015 15:52
    —
Flasher
Поехали по новой! А как же это?
Quote:
True после .SendCommand 2033 добавил. А вот , True после .SetTextToClip Sp всё-таки не убрал.

#140:  Author: FlasherLocation: Москва PostPosted: Thu Apr 30, 2015 15:56
    —
sa
Не в этом единообразие, а в скобках.

#141:  Author: LonerDLocation: Донецк PostPosted: Thu Apr 30, 2015 16:02
    —
Flasher wrote:
Если брать небольшое кол-во файлов, то новый твой вариант объективно быстрее предыдущего.

У меня были две задержки по 100 мс. Убрал их, вроде и без них стабильно отрабатывает.
Также убрал лишнее снятие выделения перед финальной загрузкой выделения из буфера.

Flasher wrote:
про поиск в архивах всё молчим.

Кстати, сейчас проверил - у тебя тоже ведь не работает ))) (форум и твою беседу с sa не читаю)

LonerD wrote:
Ну, у меня почему-то не вылились, использовались вполне простые пути решения.

1. У разных скриптовых языков разные возможности.
2. У тебя гораздо больший опыт в скриптописании.
1+2. Я пока не знаю как в AutoHotkey передать параметр %Z%P. Беру его в кавычки - скрипт получает ерунду в кавычках (да ещё иногда кавычки передаются лишь с одной стороны пути). Пишу без кавычек - тогда если путь с пробелом, то скрипт его расценивает как два параметра...
3. Значительная часть усилий и строк скрипта направлена на решение ситуации когда курсор находится на строке [..]. Моя цель - была добиться, чтоб Тотал не высвечивал ошибки об отсутствии выделенных файлов.

Flasher wrote:
LonerD wrote:
Кстати, у тебя при параметрах %Z%V 1 1 - если курсор находится на строке [..] - выскакивает докучливое Тоталовское окошко об отсутствии выделения.
Ничего подобного. У меня это самый часто используемый режим. Тем более если учесть, что ряд последних правок был привязан к тестам с установкой на данном элементе.

Ага. Понял откуда ноги растут у проблемы.
Включен плагин TwinKey вот с такими настройками:
http://rghost.ru/6cpV6Tz5D
При установке курсора на [..] твой скрипт выдаёт окошко об отсутствии выделения файлов.

#142:  Author: sa PostPosted: Thu Apr 30, 2015 16:04
    —
Flasher
Я больше о единообразном использовании параметра, а не о форме.

#143:  Author: FlasherLocation: Москва PostPosted: Thu Apr 30, 2015 16:16
    —
LonerD wrote:
Кстати, сейчас проверил - у тебя тоже ведь не работает ))) (форум и твою беседу с sa не читаю)
Так я в отличии от тебя и не заявлял, что у меня работает везде без исключений. Только, как уже писалось, средсвами AHK решить вопрос частично труда не составить. А раз ты это не читаешь, то что могу тут поделать? Повторяться не стану.
LonerD wrote:
1. У разных скриптовых языков разные возможности.
Всё относительно. В данном случае возможности совпадают.
LonerD wrote:
Беру его в кавычки
А зачем тебе брать оба, когда достаточно только %P? К тому же %Z можно и в конец параметров поставить или приклеить с любой стороны к любому параметру.

С TwinKey позже посмотрю. Мне с ним ещё свои проблемы решать и решать.

#144:  Author: LonerDLocation: Донецк PostPosted: Thu Apr 30, 2015 17:04
    —
Обновил скрипт. Ошибки исправлял.

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

 Hidden text

#145:  Author: FlasherLocation: Москва PostPosted: Thu Apr 30, 2015 17:36
    —
LonerD wrote:
Насчёт выделения файлов в результатах поиска в архивах - не знаю как реализовать.
Я же пишу, что частично. Смотришь на присутсвие [..]. Если нет, то копируешь имена без путей.

Так попробуй: "%P\"

#146:  Author: LonerDLocation: Донецк PostPosted: Thu Apr 30, 2015 17:50
    —
Flasher wrote:
Так попробуй: "%P\"

Спасибо. "%P\" работает.
Посмотрю как можно упростить, а может и добавить в архивах в поиске.

 !  Avada:
Избыточное цитирование удалено.

#147:  Author: apeet PostPosted: Sat Jul 02, 2016 09:48
    —
antabu wrote:
Подскажите, пожалуйста, как выделить (или найти), например, все чётные файлы в папке, а то я с явовскими скриптами не в ладах.



Если кому-то понадобится выделить файлы через один, два, три и так далее, устанавливаете в проводнике отображение файлов в виде эскизов, делаете размер окна проводника такого размера, чтоб поместилось 2, 3, 4 и так далее столбцов файлов и выделяете один столбец


Last edited by apeet on Wed Jul 27, 2016 15:57; edited 1 time in total

#148:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Jul 02, 2016 10:11
    —
apeet
Штаны, разумеется, можно пытаться надевать и через голову, но надо ли? Laughing
И вы случайно не обратили внимание, что на этом форуме обсуждается вовсе не Проводник, а несколько другая программа, и посетителей форума интересует, как решать задачу в ней, а не где-то ещё? А предназначение текущего подфорума — ещё более специальное.
Получите замечание за оффтоп и впредь так не делайте.

#149:  Author: Skif_off PostPosted: Sat Jul 02, 2016 13:06
    —
LonerD wrote:
Насчёт выделения файлов в результатах поиска в архивах - не знаю как реализовать. Простая загрузка выделения из буфера командой 2033 не работает при данном режиме отображения.

LB_SETSEL в таком случае работает: получить количество пунктов (LB_GETCOUNT) и слать LB_SETSEL с индексами в цикле. (В режиме эскизов не работает.)

#150:  Author: LonerDLocation: Донецк PostPosted: Sat Jul 02, 2016 14:14
    —
Skif_off wrote:
LonerD wrote:
Насчёт выделения файлов в результатах поиска в архивах - не знаю как реализовать. Простая загрузка выделения из буфера командой 2033 не работает при данном режиме отображения.

LB_SETSEL в таком случае работает: получить количество пунктов (LB_GETCOUNT) и слать LB_SETSEL с индексами в цикле.

Это в ТС9 появилось? Я ещё не пробовал полезные нововведения. Когда нибудь ближе к финалу девятки буду пересматривать и оптимизировать скрипты, когда всё устаканится, может что-то ещё добавится.

Skif_off wrote:
(В режиме эскизов не работает.)

Апни тему:
http://www.ghisler.ch/board/viewtopic.php?t=30846

#151:  Author: Skif_off PostPosted: Sat Jul 02, 2016 14:24
    —
LonerD wrote:
Это в ТС9 появилось?

Нет, дефолтные возможности ListBox, работает и в 8.52а, а в ТС9 только удобнее получить дескриптор списка.

Апать не вижу смысла, ибо сложность с LB_* улавливаю (да и режимом эскизов не пользуюсь).

#152:  Author: LonerDLocation: Донецк PostPosted: Thu Aug 04, 2016 01:01
    —
Благодаря новым возможностям ТС9 удалось значительно сократить и оптимизировать скрипт.

Code:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Total Commander DreamLair
; Script: Zebra file selection
; Скрипт: Выделение файлов зеброй
; Script version: 4.0 (2016.08.04)
; Required: Total Commander 9.0+
; Script author: LonerD
; Made in Donetsk People's Republic
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Parameters:
;    1) Selection mode:
;       1 - all; 2 - only files; 3 - only dirs
;    2) Selection position:
;       1 - begin from first file; 2 - from second etc
;       0 - begin from file under cursor
;    3) Selection range:
;       2 - each second file, 3 - each third file etc
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Параметры:
;    1) Метод выделения:
;       1 - всё; 2 - только файлы; 3 - только каталоги
;    2) Позиция выделения:
;       с какого файла начинать (с первого, второго и т.д...)
;       0 - начинать с файла под курсором
;    3) Порядок выделения:
;       2 - каждый второй файл, 3 - каждый третий и т.д....
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

Mode = %1%
First = %2%
Range = %3%

If 0 < 3
  Range = 2
If 0 < 2
  First = 1
If Mode not in 1,2,3
  Mode = 1

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

ClipSaved := ClipboardAll
Clipboard := ""

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

SendMessage, 1075, 524,,, % "ahk_id " hw_TTOTAL_CMD
SendMessage, 1075, 330 . Mode,,, % "ahk_id " hw_TTOTAL_CMD

TCAPanel := SendMessageTC(1074, 1000, 0, A)
hw_TCAPanel := SendMessageTC(1074, 8+TCAPanel, 0, A)

SelItems := SendMessageTC(1074, 1004+TCAPanel, 0, A)
if ( SelItems = 0 )
  Goto, Exit

SendMessage, 1075, 2018,,, % "ahk_id " hw_TTOTAL_CMD
FileList := Clipboard
Clipboard := ""

ControlGetText, TCAPanelPath,, % "ahk_id " hw_TCAPanel
TCAPanelPath := StrReplace(TCAPanelPath, "\*.*", "\")
FileList := StrReplace(FileList, TCAPanelPath)
IsUpDir := SendMessageTC(1074, 1008+TCAPanel, 0, A)

if ( First = 0 )
{
  FirstFile := SendMessageTC(1074, 1010+TCAPanel, 0, A)
  FirstSelFile := SendMessageTC(1074, 1006+TCAPanel, 0, A)

  if (( Mode = 3 ) & ( FirstSelFile >= FirstFile ))
  {
    SendMessage, 1075, 524,,, % "ahk_id " hw_TTOTAL_CMD
    Goto, Exit
  }
  else if ((( FirstSelFile = 0 ) & ( IsUpDir = 1)) || (( Mode = 2 ) & ( FirstSelFile < FirstFile )))
    FirstSelFile := 1
}
else
  FirstSelFile := First

FileListSel := ""
Loop, Parse, FileList, `n, `r
{
  if ( Mod(A_Index - FirstSelFile + IsUpDir,Range) = 1 )
    FileListSel := FileListSel "`r`n" A_LoopField
}

Clipboard := FileListSel
SendMessage, 1075, 2033,,, % "ahk_id " hw_TTOTAL_CMD

Exit:
Clipboard := ClipSaved
ClipSaved := ""
FileList := ""
FileListSel := ""
DllCall("LockWindowUpdate", "uint", 0)
ExitApp

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SendMessageTC(TCMsg, wParam, lParam, aControl)
{
  SendMessage, % TCMsg, % wParam, % lParam, % aControl, % "ahk_id " hw_TTOTAL_CMD
  return ErrorLevel
}
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


#153:  Author: Skif_off PostPosted: Thu Aug 04, 2016 14:29
    —
LonerD
LB_SETSEL не пробовал? Попробовал ради любопытства - у меня не срабатывает.

#154: Выделение файлов через один Author: Totas PostPosted: Sun Feb 05, 2017 10:33
    —
Как выделить папки через один, но не скриптом, а плагином (каким)? Скрипт не знаю куда вписывать.

#155:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Feb 05, 2017 10:47
    —
Totas
А плагин вы знаете, куда вписывать? Не говоря про то, что не бывает плагинов для этой задачи, полностью заменяющих скрипты. И надобности в них нет никакой. А для тех, кто не знает, что куда вписывать, есть материалы форума, включая эту тему и памятку по скриптам в "Автоматизации". См. здесь. Опять та же история?

#156:  Author: sa PostPosted: Sun Feb 05, 2017 16:07
    —
Totas
Поэкспериментируйте с плагином Misc. В диалоге поиска (Alt+F7) на вкладке "Плагины" нужно задать параметры
Плагин: misc
Свойство: odd
Операция: =
Значение: Да
и на вкладке "Шаблоны поиска" сохранить шаблон (назовём его odd).
После этого из расширенного русского меню или из кнопки вызывать команду для выделения группы папок (cm_SelectFolders - Выделить группу: только папки) и выбирать созданный ранее шаблон >odd. В девятой версии тотала можно просто завести кнопку с командой selectfilesd >odd.

#157:  Author: jackal-85 PostPosted: Tue Dec 19, 2017 10:57
    —
LonerD wrote:
Благодаря новым возможностям ТС9 удалось значительно сократить и оптимизировать скрипт.

подскажите, пожалуйста, как использовать Ваш скрипт?
что сделал я:
скопировал код, сохранил в файле формата vbs, закрепил на панели в TC9.01, добавлял различные параметры (%V, %Z, %P, 1 1 2)...
в любых случаях выдаёт ошибку 800А0400.
что я делаю не так?
спасибо большое!

#158:  Author: FlasherLocation: Москва PostPosted: Tue Dec 19, 2017 11:16
    —
jackal-85 wrote:
что я делаю не так?
1. Начинаете предложения с маленькой буквы.
2. Не так сохраняете. Это ahk, а не vbs (себе потом тоже делал упрощённый под ТС9). Запускается через свой интерпретатор.
3. Не читаете внимательно шапку скрипта и памятку раздела.

#159:  Author: jackal-85 PostPosted: Tue Dec 19, 2017 15:49
    —
Flasher wrote:
jackal-85 wrote:
что я делаю не так?
1. Начинаете предложения с маленькой буквы.
2. Не так сохраняете. Это ahk, а не vbs (себе потом тоже делал упрощённый под ТС9). Запускается через свой интерпретатор.
3. Не читаете внимательно шапку скрипта и памятку раздела.
а Можно Было Просто Написать "установи AutoHotkey", А Не Писать Столько Всего Лишнего...

ну и на этом спасибо!

#160:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Dec 19, 2017 15:56
    —
jackal-85
В первую очередь можно (и нужно!) соблюдать правила форума, за нарушение которых — замечание.

#161:  Author: FlasherLocation: Москва PostPosted: Tue Dec 19, 2017 16:18
    —
jackal-85
А ничего лишнего (в отличии от запрошенного) и не написано. Во-первых, приведены ссылки, по которым есть возможность определиться с выбором. Во-вторых, тут де-факто принято сперва читать прикреплённую памятку без задавания лишних вопросов. В-третьих, как-то вот обходимся мы без установки, поэтому предлагать подобное выглядело бы с моей стороны нелепицей. Под запуском через интерпретатор понимается не что иное, как подстановка пути перед путём к скрипту.

#162:  Author: jackal-85 PostPosted: Tue Dec 19, 2017 16:40
    —
Flasher wrote:
Во-первых, приведены ссылки, по которым есть возможность определиться с выбором.
спасибо, не обратил внимание на скрипт vbs...
Flasher wrote:
Во-вторых, тут де-факто принято сперва читать прикреплённую памятку без задавания лишних вопросов.
не нашёл в теме, поэтому и спросил...
Flasher wrote:
В-третьих, как-то вот обходимся мы без установки, поэтому предлагать подобное выглядело бы с моей стороны нелепицей. Под запуском через интерпретатор понимается не что иное, как подстановка пути перед путём к скрипту.
я не знаю как можно обойтись, и поэтому тоже спросил...
вобщем спасибо!

#163:  Author: FlasherLocation: Москва PostPosted: Tue Dec 19, 2017 16:55
    —
jackal-85 wrote:
не нашёл в теме
В теме прикреплений быть не может. Написано о текущем разделе.
jackal-85 wrote:
не знаю как можно обойтись
Элементарно. Распаковывается верхний .zip под голубой кнопкой и используется подстановочный и соответствующий битности системы интерпретатор (AutoHotkeyU(32/64).exe).

P.S.: П. 1 тут игнорировать чревато. Советую уважать участников обсуждения, тут не чат.

#164:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Dec 19, 2017 16:59
    —
jackal-85
Ещё раз — и последний: либо вы оформляете свои посты нормально, либо, скорее всего, будете дальше решать свои проблемы в другом месте.

#165:  Author: HEXFIXLocation: Калининград PostPosted: Sat May 02, 2020 16:54
    —
Flasher, а возможно скрипт доработать? По факту мелочь, но было бы идеально.
Сейчас объясню. Если я задаю в параметрах "выделить только папки" и применяю скрипт, но при этом курсор не стоит именно на папке, то выделения папок не происходит. С файлами работает где бы курсор ни стоял. Можно ли сделать то же самое и для папок?

#166:  Author: FlasherLocation: Москва PostPosted: Sat May 02, 2020 22:27
    —
HEXFIX
С учётом тогдашнего числа тестов и кол-ва правок, такой очевидности не заметить было бы невозможно. Не подтверждается и сейчас.
В фразе "при этом курсор не стоит именно на папке" выделенное подразумевает, что проблема есть только при установке курсора на [..], ибо файлы всегда идут следом. Верно? Или есть какие-то ещё условия, о которых умолчалось?

#167:  Author: HEXFIXLocation: Калининград PostPosted: Sun May 03, 2020 01:51
    —
Flasher wrote:
проблема есть только при установке курсора на [..], ибо файлы всегда идут следом. Верно?

У меня не срабатывает именно, если курсор не стоит на папке, не обязательно на [...]. Т.е. в файловой панели список папок и файлов. Курсор стоит на файле (не на папке), применяю скрипт с параметром, выделения "3", папки не выделяются. Вообще ничего не выделяется.
С параметром "2" только файлы выделяются независимо от того, стоит курсор на папке или на файле.
Вот такого же поведения хотелось бы и для "только папки".

#168:  Author: FlasherLocation: Москва PostPosted: Sun May 03, 2020 03:58
    —
HEXFIX wrote:
не обязательно на [...]
На [..] не срабатывает? Скринкаст в студию.

Что касается "курсор на файле". Выше замечено: "файлы всегда идут следом".
А что ещё можно ждать от скрипта с названием "Выделить с заданным интервалом, начиная с элемента под курсором"?
Это фичевая суть скрипта, а не ограничение или недостаток.

#169:  Author: HEXFIXLocation: Калининград PostPosted: Sun May 03, 2020 09:22
    —
Flasher wrote:
На [..] не срабатывает?

Срабатывает
Flasher wrote:
файлы всегда идут следом
начиная с элемента под курсором

Всё, понял. И действительно, я как-то этот момент упустил. Тогда вопросов нет.



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


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

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group