Переход к следующему расширению

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

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

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

Сообщение Flasher »

sa
Раз говорим А, надо говорить и B. Почему не нужны?
Тогда выделение и поиск будет производиться не только по типам файлов, но и по типам папок, и тогда придётся самому мышкой указывать тот файл, с которого начнётся поиск. А это не есть правильно и добавляет доп. манипуляции.

P.S.: а вообще господин создатель не должен побрезговать новой подобной командой в Тотале. Было бы неплохо написать ему в хотелку.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Flasher писал(а):придётся самому мышкой указывать тот файл, с которого начнётся поиск
Меня устраивает именно такой способ.
CaptainFlint писал(а):Как вариант, можно это всё загнать в макрос.
Ничего, что загнал? Для работы нужен TCWSHelp:

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

'  Description:  Перейти к следующему расширению
'  Requirements: WSH Helper for TC by Volniy
'  Installation: Создайте для скрипта, например, кнопку на панели инструментов TC

Option Explicit
Dim TCS
Set TCS = CreateObject("TCScript.Helper")
TCS.LockTC True
TCS.SendCommand 527 'cm_SelectCurrentExtension
TCS.SendCommand 525 'cm_ExchangeSelection
TCS.SendCommand 2053 'cm_GotoNextSelected
TCS.SendCommand 524 'cm_ClearAll
TCS.LockTC False 
Set TCS = Nothing
Wscript.Quit
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Вот хорошо, что ты скрипт создал, сразу и вылезли на поверхность те нюансы, о которых я писал, и насчёт папок и насчёт перехода на первый файл по окончанию списка.
Доверши пожалуйста, если не трудно.)
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

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

Сообщение Flasher »

Да я понимаю. Просто я знаю, что если я также скопом напишу в той же последовательности свои команды у меня ничего не выйдет, так как там должны выполняться определённые условия. Если ты в этом(скриптинге) понимаешь, то я тебя прошу по-отечески. Мне вовсе не обязательно выполнять список тех команд, что я указал. Мне достаточно, чтобы выполнялись след. условия:
1. Переход происходил только по файлам (не по папкам)
2. по нахождению курсора на последнем файле и нажатию кнопки происходил перескок на первый.
Последний раз редактировалось Flasher Пт фев 12, 2010 18:06, всего редактировалось 1 раз.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

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

Сообщение Flasher »

Avada писал(а):Flasher
В чём смысл завершающего перехода на первый файл?
Ну я мог бы также и спросить: в чём смысл перехода на первый файл с другим расширением? Ну раз спросили: Буква с диал. поиска < Помним? Вот если осуществлять переход по набору текста, то по окончанию списка происходит переход на первый файл, удовлетворяющий условию(это не я придумал). Когда файлов много в папке, бывает проще нажимать только одну кнопку, а не искать другую, типа Home или cm_GoToFirstFile.
Avada писал(а):Что касается папок, то проблема легко решается добавлением после команды инверсии (cm_ExchangeSelection) следующей командой cm_ClearAllFolders, т.е. снятия выделения только с папок.
Вот спасибо, сейчас буду пробовать.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Avada писал(а):добавлением после команды инверсии (cm_ExchangeSelection) следующей командой cm_ClearAllFolders, т.е. снятия выделения только с папок.
Работает, но только там где нет папок, если курсор на первой строке(переход в род. катал.), пишет "Такие файлы не найдены".:( И переход на первый в силе. :)
Последний раз редактировалось Flasher Пт фев 12, 2010 18:47, всего редактировалось 1 раз.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

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

Сообщение Flasher »

Avada
То что не было разговора в первом посте не мешает поднимать из раза в раз неучтённые моменты с усовершенствованием задачи, если прослеживать цепочку тем форума. Или я ошибаюсь?

И зачем мне сейчас это было объяснять? Я об этом писал, что нет смысла пихать в один список. Вот мне то, как раз нужен ответ на вопрос, как добиться таки поставленной цели. Не буду же я заносить это в отдельную ветку, не правда ли? :wink:
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

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

Сообщение Flasher »

Avada писал(а):Не понял. Как курсор вообще оказался в рамках нашей задачи на строке перехода в родительский каталог?
А там, где ставилась задача, момент с положением курсора и не обговаривался. Поэтому продолжаем "диспут" на предмет усовершенствования.) Там где папки присутствуют, при нахождении курсора на строке перехода в р.к., выполняется команда очищения от них, поэтому с этой строки всё работает, когда же папок нет, всплывает та самая петрушка с ненахождением того, что можно очистить. Решаемо, нет? :wink:
В общем ждём'с плагинописцев.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

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

И по исходным условиям задачи совершенно очевидно, что на момент запуска скрипта курсор должен находиться на произвольном файле произвольной группы, поскольку мы ищем следующее расширение. Но никак не на строке перехода в родительский каталог.

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

Сообщение Flasher »

Avada писал(а):Flasher
Не плагинописцев, а скриптописцев.
Эко я так промахнулся.:shock: На язык не то слово встало в полусне.)
Мне задача циклического перехода не по плечу...— факт.
Это я уже и так понял.
И по исходным условиям задачи совершенно очевидно, что на момент запуска скрипта курсор должен находиться на произвольном файле произвольной группы, поскольку мы ищем следующее расширение. Но никак не на строке перехода в родительский каталог.
То что мы ищем след. расширение, вовсе не означает, что оно должно находиться на каком-то определённом файле. Скрипт может подходить как один из универсальных способов навигации. Возьмём, предположим, команду cm_GotoNextSelected, по сути она должна предполагать что курсор находится уже на каком-то выделенном файле, но, как можно убедиться, это не так, и работает она стабильно и при нахождении курсора на строке перехода, и на любом предшествующем непомеченном файле.
Если нужен другой результат – надо формулировать модифицированный вариант задачи заново. От и до.
Я вот уже не первый год читаю форум, и что-то впервые такое "надо" вижу. Если человеку нужно было бы добавить какую-то определённую функцию для скрипта, то тот, кто компетентен([как пример - Batya), по желанию справлялся с новой задачей, а не просил написать заново все старые условия + новое. Ладно, педантичность - дело тонкое. Пишу:

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

Сообщение Avada »

Flasher писал(а):То что мы ищем след. расширение, вовсе не означает, что оно должно находиться на каком-то определённом файле.
А где ещё может находиться следующее расширение, кроме как на каком-то определённом файле? Навигация выполняется на конкретный файл (по любому варианту условий – первый в следующей группе), а не на деревню дедушке.
Flasher писал(а):то тот, кто компетентен(как пример - Batya), по желанию справлялся с новой задачей, а не просил написать заново все старые условия + новое
Угу. Особенно если сам же начинал решать исходную задачу, следил за продолжением темы и не имел вопросов по точности формулировки условий. Но он пока здесь не проявился. Я просто пытаюсь людям облегчить работу — только и всего.

И по формулировке задачи:
Flasher писал(а):[При нахождении курсора в любой части панели (строка перехода в родительский каталог <...> должен выполняться циклический переход курсора на первый файл(не папку) с другим расширением
Это к вопросу о педантичности. Какое может быть другое расширение относительно элемента списка, никакого расширения не имеющего по определению? Кроме того, другой файл может быть как предыдущим, так и последующим относительно текущего.

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