Копирование файлов на временную панель

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 1402
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 98 times
Been thanked: 108 times
Contact:

Копирование файлов на временную панель

Post by buniak_a_h »

Здравствуйте!
Предлагаю к обсуждению скрипт для копирования отмеченных файлов на временную панель.
Суть скрипта такова:
1. Вешается обработчик событий на инициализацию и закрытие стандартного диалога копирования файлов
2. При инициализации в историю добавляется имя временной панели (в зависимости от язка может быть разное)
3. При закрытии диалога, если нажата кнопка "по умолчанию" и в качестве приёмника указана временна панель, то происходит отказ от реального копирования, а помеченные элементы добавляются на временную панель. После этого состояние панелей (видимость, тип) восстанавливается.
--
Отсюда ограничение: не гарантируется корректность работы скрипта, если пассивная панель открыта плагином, не поддерживающим функцию far.SetPanelDirectory (я знаю один такой: MultiArc). Также не проверялась работа скрипта, если активная панель - плагиновая. НО! Даже если работать не будет, полезность скрипта лично у меня не вызывает сомнений, т.к. постоянно приходится переключаться на временную панель и добавлять…


CopySelectedToTempPanel.v1_1_0.7z
(23.09 KiB) Downloaded 5 times
Last edited by buniak_a_h on Fri 17 Jan, 2020 13:32, edited 4 times in total.

citRiks
Posts: 177
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 29 times
Been thanked: 23 times

Копирование файлов на временную панель

Post by citRiks »

buniak_a_h,

Макрос нужный, но на Win10 в сегодняшней ночной сборке .

buniak_a_h
Posts: 1402
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 98 times
Been thanked: 108 times
Contact:

Копирование файлов на временную панель

Post by buniak_a_h »

citRiks, у меня был такой вылет на одной из ранних стадий разработки. Более того! После того вылета весёлый Каспер решил, что Far - вирус и стёр его нафик. К счастью, только Far.exe :-) Но теперь, вроде, ничего не вылетает и работает как должно. Я на всякий случай залил новую версию, в которой убраны некоторые некорректности (хотя они не должны были приводить к вылету). Попробуйте… Если вылет повторится и Вам будет не влом - я попробую его поймать (с Вашей помощью - буду посылать скрипт с отладочным Show) Ну и предварительно:
1. Формируется ли имя временной панели и имеется ли оно в истории? Для чистоты эксперимента, если не жалко, почистите историю (кнопка Del при раскрытом списке-истории).
2. Есть ли у Вас средство для перехвата отладочного вывода (например, DbgView)? Если да - я тогда сразу "напичкаю" скрипт вызовами OutputDebugString, а Вы мне пришлёте "перехват".
3. Опять же если такое случится - давайте, чтоб тему не засорять, в личку. А сюда - только сигнал, что будем смотреть. А то трудно поймать багу, если она никак не проявляется...

citRiks
Posts: 177
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 29 times
Been thanked: 23 times

Копирование файлов на временную панель

Post by citRiks »

buniak_a_h wrote:
Mon 25 Nov, 2019 00:19
Сделал версию 1.0.3
Спасибо. Так макрос работает без выдачи ошибок. Подробнее — в личке.
Last edited by citRiks on Mon 25 Nov, 2019 15:23, edited 2 times in total.

buniak_a_h
Posts: 1402
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 98 times
Been thanked: 108 times
Contact:

Копирование файлов на временную панель

Post by buniak_a_h »

Сделал версию 1.0.3. В основном оптимизация.

LAT
Posts: 276
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 13 times
Been thanked: 21 times

Копирование файлов на временную панель

Post by LAT »

Если добавить какой-нибудь текст к "Временная панель"
, то файлы на временную панель не добавляются, а в текущей папке создается файл "Временная панель" нулевого размера.
Last edited by LAT on Tue 14 Jan, 2020 21:53, edited 1 time in total.

buniak_a_h
Posts: 1402
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 98 times
Been thanked: 108 times
Contact:

Копирование файлов на временную панель

Post by buniak_a_h »

LAT, ну это естественно. Хотя Вы ещё, наверно, и двоеточие почикали… Именно поэтому я читаю описание плагина при актуальном языке и строку помещаю в историю - чтоб название с точностью до символа совпадало с титлом плагина. А как Вы предлагаете определять, что юзер хочет скопировать отмеченное на временную панель? Принимаются любые идеи…

buniak_a_h
Posts: 1402
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 98 times
Been thanked: 108 times
Contact:

Копирование файлов на временную панель

Post by buniak_a_h »

LAT, вдогоночку.
Приемник сравнивается с far.GetPluginInformation(far.FindPlugin("PFM_GUID", win.Uuid('B77C964B-E31E-4D4C-8FE5-D6B0C6853E7C'))).PInfo.PluginConfig.Strings[1] .. ":" . Должно совпадать ТОЧНО. Чтобы не ошибиться как раз и заношу в историю. Если история диалогов выключена, макрос, видимо, работать не будет. Но это, по-моему, какая-то экзотика …
Оптимальным было бы добавить кнопку "на временную панель", но zg отвечал мне, что это невозможно. Если бы в диалоге копирования был бы хоть один комбобокс, я мог бы добавить в список ту самую временную панель. НО! Единственный комбобокс, который я нашёл, это - реакция на Already existing files:, но там это как-то нелогично; вот и пришлось юзать DI_EDIT для Destination при включённой истории. Потому и потребовалось точное совпадение.
Last edited by buniak_a_h on Mon 13 Jan, 2020 15:51, edited 1 time in total.

buniak_a_h
Posts: 1402
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 98 times
Been thanked: 108 times
Contact:

Копирование файлов на временную панель

Post by buniak_a_h »

LAT, о! Идея!
Если в строке назначения использовать префикс (например, tmp:), то вероятность ошибки, наверно, резко уменьшится! Сделаю …

buniak_a_h
Posts: 1402
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 98 times
Been thanked: 108 times
Contact:

Копирование файлов на временную панель

Post by buniak_a_h »

Версия 1.0.5 - для кеопирования на временную панель принимает как наименование панели, так и префикс командной строки плагина (например, tmp:)

LAT
Posts: 276
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 13 times
Been thanked: 21 times

Копирование файлов на временную панель

Post by LAT »

buniak_a_h wrote:
Mon 13 Jan, 2020 15:32
Вы ещё, наверно, и двоеточие почикали…
Нет. Просто добавил символ.
buniak_a_h wrote:
Mon 13 Jan, 2020 15:32
Принимаются любые идеи…
1. В случае неудачи не создавать пустой файл.
2. И выводить сообщение, что файлы не были добавлены.
ЗЫ. Можно еще попробовать анализировать, нет ли после названия (и [уже] префикса :)) временной панели мусора. Но, имхо, это лишнее: нечего вводить что попало.

buniak_a_h
Posts: 1402
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 98 times
Been thanked: 108 times
Contact:

Копирование файлов на временную панель

Post by buniak_a_h »

LAT wrote:
Mon 13 Jan, 2020 19:10
1. В случае неудачи не создавать пустой файл.
2. <…>
В случае неудачи работает стандартное копирование. Не от меня зависит. Я ничего не создаю. Просто если назначение - far.GetPluginInformation(far.FindPlugin("PFM_GUID", win.Uuid('B77C964B-E31E-4D4C-8FE5-D6B0C6853E7C'))).PInfo.PluginConfig.Strings[1] .. ":" или far.GetPluginInformation(far.FindPlugin("PFM_GUID", win.Uuid('B77C964B-E31E-4D4C-8FE5-D6B0C6853E7C'))).PInfo.CommandPrefix, то я работаю, иначе - что там фар сам должен делать. Проверяется в condition, поэтому не моя ошибка. Думаю, если в обычном ФАРе (без этого скрипта) вы зададите копирование туда же, то тоже что-то создастся.
Хотя, наверно, укажите точнее, что куда добавили (символ). Там должен сработать стандартный диалог ФАРа (что есть цель: файл или фольдер?) и должен вызваться эксепшн по недействительному имени (если Вы не удалили двоеточие, как Вы пишете).
Короче, мой скрипт вообще ничего не создаёт и не копирует.

LAT
Posts: 276
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 13 times
Been thanked: 21 times

Копирование файлов на временную панель

Post by LAT »

buniak_a_h wrote:
Mon 13 Jan, 2020 22:04
LAT wrote:
Mon 13 Jan, 2020 19:10
1. В случае неудачи не создавать пустой файл.
2. <…>
В случае неудачи работает стандартное копирование. Не от меня зависит. Я ничего не создаю.
Вы правы, не подумал. Создается файл с альтернативным потоком (собственно, как и запрашивалось :)).
Тогда предлагаю убрать двоеточие. Во избежание.
Или (имхо, лучше) поставить двоеточие не в конец, а в начало. Т.е. вместо "временная панель:" или "tmp:" предлагать ":временная панель" или ":tmp". И зрительно выделяться будет. И заодно FAR покажет невозможность скопировать.
ЗЫ. В принципе, вместо двоеточия можно использовать любой другой запрещенный символ. Но тут нужно учитывать, что есть скрипт FIN (viewtopic.php?f=60&t=7864), аналог плагина FIN (viewtopic.php?p=67484#p67484), который может корректировать имена файлов. Но двоеточие скрипт не исправляет.

buniak_a_h
Posts: 1402
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 98 times
Been thanked: 108 times
Contact:

Копирование файлов на временную панель

Post by buniak_a_h »

LAT, Откуда взялась эта строка:
(БЕЗ моего скрипта)
1. Откройте на пассивной панели временную и вызовите диалог копирования
2. Убедитесь, что в приёмнике оказалось именно то, что в таких случаях подставляет мой скрипт. Причем при смене языка как заголовок панели, диалог копирования, так и мой скрипт меняют текст.
Ваше предложение не спасёт, видимо, в такой ситуации: приемник указан we:tmp (2 "лишних" символа - we - попал не в конец строки, а в начало).
──
P/S.
Варианты решения:
1. для префикса использовать, например, форму <tmp>
2. Если строка-мишень начинается с (title временной панели + ":"), после которых может быть ещё что-нить, то задавать уточняющий вопрос
Last edited by buniak_a_h on Tue 14 Jan, 2020 22:39, edited 2 times in total.

LAT
Posts: 276
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 13 times
Been thanked: 21 times

Копирование файлов на временную панель

Post by LAT »

buniak_a_h wrote:
Tue 14 Jan, 2020 22:36
Варианты решения...
Да, это более надежно, чем предложил я.

Post Reply

Return to “Обсуждение макросов”