MergeBars

Название MergeBars
Имя файла (*.txt) MergeBars.txt
Описание Создает временную панель с именем _temp.bar из двух существующих панелей
Автор Вахмурка
Параметры "%P%N", "%T%M"
Параметр 1: имя первой панели
Параметр 2: имя второй панели
(можно поменять местами в процессе выполнения скрипта)
Вызываемые плагины win, miscplugin, file, osd, ini, vec
Иконка
Версия 1.3
Дата обновления 08.09.2006
Вызываемые модули Скрипт LoadBar

args First, Second
local mpDlgText, Result, Key, Number, i, Buttons1, Buttons2
local Path = "путь_к_панелям\"
local Target = Path ++ "_temp.bar"
local Bars = Path ++ "*.bar"
local mpDlgCaption = "Wrong Parameter"
local mpIcon = "WARNING"

if(file.isfolder(First)) do
	mpDlgText = "First bar is " ++ First ++ "\nIt must be a file rather than a folder"
	if(MiscPlugin.MessageBox(2, "&Quit", "&Pick file") == "&Quit")
		quit

	First = pickfile(file.listfiles(Bars, 0), "Pick First Bar File")
	if(not First)
		quit

endif

if(file.type(First) != "bar") do
	mpDlgText = "First bar is " ++ First ++ "\nIt should have the BAR extension."
	if(MiscPlugin.MessageBox(2, "&Continue", "&Pick file") == "&Pick file") do
		First = pickfile(file.listfiles(Bars, 0), "Pick First Bar File")
		if(not First)
			quit

	endif
endif

if(file.isfolder(Second)) do
	mpDlgText = "Second bar is " ++ Second ++ "\nIt must be a file rather than a folder"
	if(MiscPlugin.MessageBox(2, "&Quit", "&Pick file") == "&Quit")
		quit

	Second = pickfile(file.listfiles(Bars, 0), "Pick Second Bar File")
	if(not Second)
		quit

endif

if(file.type(Second) != "bar") do
	mpDlgText = "Second bar is " ++ Second ++ "\It should have the BAR extension."
	if(MiscPlugin.MessageBox(2, "&Continue", "&Pick file") == "&Pick file") do
		Second = pickfile(file.listfiles(Bars, 0), "Pick Second Bar File")
		if(not Second)
			quit

	endif
endif

@start

mpDlgText = "Second bar " ++ Second ++ " will be appended to the First bar " ++ First
mpDlgText = mpDlgText ++ "\n\n(Choose 'Exchange' to exchange First with Second)"
mpDlgCaption = "Merge Bars"
mpIcon = "INFORMATION"
Result = MiscPlugin.MessageBox(1, "&Go!", "E&xchange", "&Cancel")

if(Result == "&Cancel") do
	quit
elseif(Result == "E&xchange") do
	mpDlgText = First
	First = Second
	Second = mpDlgText
	jump start
endif

osd.show("Wait...", "INFINITE", "48", "Arial Cyr", "-1", "255 000 000")

if(not file.copy(First, Target)) do
	mpDlgText = "Failure copying " ++ First ++ " to " ++ Result
	messagebox("ok error", mpDlgText, "FILE plugin error #1")
	quit
endif

Buttons1 = ini.get(First, "Buttonbar", "Buttoncount")
if(ini_status != "OK") do
	messagebox("ok error", ini_status, "INI plugin error #1")
	quit
endif

Buttons2 = ini.get(Second, "Buttonbar", "Buttoncount")
if(ini_status != "OK") do
	messagebox("ok error", ini_status, "INI plugin error #2")
	quit
endif

Result = ini.set(Target, "Buttonbar", "Buttoncount", Buttons1 + Buttons2)
if(Result != "OK") do
	messagebox("ok error", Result, "INI plugin error #3")
	quit
endif

v = vec.createfromwords("button cmd param Bars menu iconic")
if(v == 0) do
	messagebox("ok error", "Failure creating vector", "VEC plugin Error")
	quit
endif

for(i = 1; i <= Buttons2; i++)
	Number = i + Buttons1
	for(j = 0; j <= 5; j++)
		Key = v[j] ++ i
		if(ini.check_exists(Second, "Buttonbar", Key) == 3) do
			mpDlgText = ini.get(Second, "Buttonbar", Key)
			Key = v[j] ++ Number
			Result = ini.set(Target, "Buttonbar", Key, mpDlgText)
			if(Result != "OK") do
				messagebox("ok error", Result, "INI plugin error #5")
				quit
			endif
		endif
	endfor
endfor

vec.destroy(v)
vec.unload
ini.unload
osd.unload

mpDlgText = "First bar " ++ First ++ " and Second bar " ++ Second
mpDlgText = mpDlgText ++ "\nare successfully merged in " ++ Target
mpDlgCaption = "Congratulations!"
mpIcon = "QUESTION"
mpDlgText = mpDlgText
Result = MiscPlugin.MessageBox(1, "&Open Bar", "to &First", "to &Second", "&to...", "&Quit")

if(Result == "&Open Bar") do
;LoadBar - имя скрипта LoadBar
	runfile.LoadBar(Target)
elseif(Result == "to &First") do
	Result = file.move(Target, First)
		if(not Result) do
			mpDlgText = "Failure renaming " ++ Target ++ " to " ++ First
			messagebox("ok error", mpDlgText, "FILE plugin error #2")
			quit
		endif
elseif(Result == "to &Second") do
	Result = file.move(Target, Second)
		if(not Result) do
			mpDlgText = "Failure renaming " ++ Target ++ " to " ++ Second
			messagebox("ok error", mpDlgText, "FILE plugin error #3")
			quit
		endif
elseif(Result == "&to...") do
@NewName
	Key = inputcancel("New name for bar")
	Key = Path ++ Key ++ ".bar"
	if(not file.validpath(Key)) do
		mpDlgText = "File " ++ Key ++ " already exists! Overwrite?"
		if(messagebox("yesno warning", mpDlgText, "Warning") == 7)
			jump NewName

	endif
	if(not file.move(Target, Key)) do
		mpDlgText = "Failure renaming " ++ Target ++ " to " ++ Key
		messagebox("ok error", mpDlgText, "FILE plugin error #4")
		quit
	endif
endif

Комментарии:

При редактировании панелей бывает необходимо перенести кнопку с одной панели на другую. Это можно сделать так:

Если же требуется скопировать несколько кнопок, все это необходимо проделывать для каждой. Скучно. Можно достичь той же цели с помощью текстового редактора, но это не сильно веселее - приходится вручную править кучу цифр.

Скрипт сливает вместе две панели, образуя новую с именем _temp.bar.

путь_к_панелям, как правило, совпадает с рабочей директорией Total Commander.

После успешного создания суммарной панели _temp.bar предлагается следующее:

Созданная панель является сугубо временной (что подчеркивает имя) и при следующем запуске скрипта будет затерта.


На главную Все о Total Commander PowerPro PowerPro & Total Commander