Page 1 of 2

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

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


CopySelectedToTempPanel.v1_1_0.7z
(23.09 KiB) Downloaded 5 times

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

Posted: Sun 24 Nov, 2019 10:49
by citRiks
buniak_a_h,

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

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

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

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

Posted: Sun 24 Nov, 2019 20:34
by citRiks
buniak_a_h wrote:
Mon 25 Nov, 2019 00:19
Сделал версию 1.0.3
Спасибо. Так макрос работает без выдачи ошибок. Подробнее — в личке.

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

Posted: Mon 25 Nov, 2019 00:19
by buniak_a_h
Сделал версию 1.0.3. В основном оптимизация.

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

Posted: Mon 13 Jan, 2020 15:24
by LAT
Если добавить какой-нибудь текст к "Временная панель"
, то файлы на временную панель не добавляются, а в текущей папке создается файл "Временная панель" нулевого размера.

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

Posted: Mon 13 Jan, 2020 15:32
by buniak_a_h
LAT, ну это естественно. Хотя Вы ещё, наверно, и двоеточие почикали… Именно поэтому я читаю описание плагина при актуальном языке и строку помещаю в историю - чтоб название с точностью до символа совпадало с титлом плагина. А как Вы предлагаете определять, что юзер хочет скопировать отмеченное на временную панель? Принимаются любые идеи…

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

Posted: Mon 13 Jan, 2020 15:50
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 при включённой истории. Потому и потребовалось точное совпадение.

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

Posted: Mon 13 Jan, 2020 16:00
by buniak_a_h
LAT, о! Идея!
Если в строке назначения использовать префикс (например, tmp:), то вероятность ошибки, наверно, резко уменьшится! Сделаю …

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

Posted: Mon 13 Jan, 2020 16:51
by buniak_a_h
Версия 1.0.5 - для кеопирования на временную панель принимает как наименование панели, так и префикс командной строки плагина (например, tmp:)

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

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

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

Posted: Mon 13 Jan, 2020 22:04
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, поэтому не моя ошибка. Думаю, если в обычном ФАРе (без этого скрипта) вы зададите копирование туда же, то тоже что-то создастся.
Хотя, наверно, укажите точнее, что куда добавили (символ). Там должен сработать стандартный диалог ФАРа (что есть цель: файл или фольдер?) и должен вызваться эксепшн по недействительному имени (если Вы не удалили двоеточие, как Вы пишете).
Короче, мой скрипт вообще ничего не создаёт и не копирует.

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

Posted: Tue 14 Jan, 2020 21:45
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), который может корректировать имена файлов. Но двоеточие скрипт не исправляет.

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

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

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

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