|
Название | ClipListDialog |
Имя файла (*.txt) | ClipListDialog.txt |
Описание | Копирует в буфер имена файлов, основываясь на настройках диалога с пользователем |
Автор | Вахмурка |
Параметры | ("%L") |
Вызываемые плагины | file, vec, clip |
Иконка | |
Версия | 1.2 |
Дата обновления | 18.05.2006 |
local fh = file.open(arg(1), "r") local Str, Counter, What, Depth, i, j, Result, Temp, Before, After local Char, Len, Path, Slash if(fh > 0) do for(not(file.eof(fh))) Str = file.readstring(fh) if(Str != 0) do Counter = Counter + 1 What = Str endif endfor else messagebox("ok error", "File not opened", "FILE plugin error") quit endif ;Sub_ParsePath - имя скрипта ParsePath Depth = runfile.Subs\Sub_ParsePath(What, "") v = vec.create(Counter) if(v == 0) do messagebox("ok error", "Vector not created", "VEC plugin error") quit endif Path = "Copy " ++ Counter ++ " name(s) to clipboard" Temp = "maximum is " ++ Depth What = "default - Full Path" Result = Inputdialog("~What=What to Copy??Name with Extension (name.txt)|Path (c:\dir)|Name Only (name)|Extension Only (txt)|Full Path (c:\dir\name.txt)|File Size|Path + Name; No Extension (c:\dir\name), Temp=Path Depth, Before=Before, After=After, Slash=Replacer for \ (default - none)", Path) if(Result == 0) do file.close(fh) quit endif Depth = ifelse(miscplugin.is_int(Temp) == "1", Temp, 0) file.restart(fh) for(i = 0; i < Counter; i = i + 1) Str = file.readstring(fh) v[i] = Str if(Depth != 0 && Depth != "") do Path = runfile.Subs\Sub_ParsePath(Str, Depth) Path = Path ++ "\" else Path = file.folder(Str) ++ "\" endif if(What == "Name with Extension (name.txt)") do v[i] = file.nametype(Str) elseif(What == "Full Path (c:\dir\name.txt)" || What == "default - Full Path") do v[i] = Path ++ file.nametype(Str) elseif(What == "Path (c:\dir)") do v[i] = remove(Path, -1) elseif(What == "Name Only (name)") do v[i] = file.name(Str) elseif(What == "Extension Only (txt)") do v[i] = file.type(Str) elseif(What == "File Size") do v[i] = file.size(Str) elseif(What == "Path + Name; No Extension (c:\dir\name)") do v[i] = Path ++ file.name(Str) endif if(Slash != "") v[i] = replacechars(v[i], "\", Slash) v[i] = Before ++ v[i] ++ After endfor file.close(fh) Str = vec.makelines(v) clip.set(Str) vec.destroy(v) vec.unload file.unload
Скрипт продолжает дело, начатое скриптом ClipFileList, а именно - копирует в буфер имя файла (если на панели ничего не выделено) или имена файлов (если выделена группа).
Изменение заключается в том, что опции такого копирования задаются не через параметры, как в скрипте ClipFileList, а в диалоговом окне.
Если скрипт ClipFileList предназначен для типового копирования, то есть для тех операций, которые приходится выполнять часто, скрипт ClipListDialog наиболее удобен для всех остальных случаев. Например, мне часто приходится копировать в буфер имена с разной глубиной пути. Создавать отдельную кнопку для каждой глубины мне показалось нецелесообразным, и я написал ClipListDialog.
Итак, для копирования в буфер имени одного файла просто запустите скрипт, для копирования нескольких имен - сперва выделите их. После запуска появляется диалоговое окно примерно такого вида:
В выпадающем списке "What to copy" выберите ту информацию о файле, которую надо скопировать. Строка "Path Depth" задает глубину пути. Сообщение, которое изначально в этой строке содержится, показывает максимальную глубину пути последнего из выделенных файлов. Сообщение не значит, что нельзя задавать глубину больше, чем указано - просто в таком случае будет скопирован весь путь. Если же выделенные файлы находятся в разных директориях (например, если файлы выделены с панели listbox после поиска), то можно вообще не обращать внимание на подсказку.
Назначение строк "Before" и "After" понятно. Изначально они пусты, а строки для оформления имени как html-ссылку я вставил для демонстрации кавычек - в отличие от скрипта ClipFileList, скрипт ClipListDialog не испытывает никаких проблем в работе с кавычками. Наконец, строка "Replacer for \" позволяет задавать любой символ (обычно "/"), которым будет заменен "\".
Кстати, утилита List To Clipboard, которая не устраивала меня своей функциональностью, ничего похожего на диалог обеспечить не может в принципе!
На главную | Все о Total Commander | PowerPro | PowerPro & Total Commander |