ClipListDialog

Название 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