Button2Clip

Название Button2Clip
Имя файла (*.txt) Button2Clip.txt
Описание Выдает список всех панелей кнопок (button bars). Копирует в буфер образ кнопки
Автор Вахмурка
Параметры "1" (для отчета; или ничего)
Вызываемые плагины vec, win, file, ini, clip
Иконка
Версия 1.1
Дата обновления 03.03.15
args Stat
static Config = pprofolder ++ "scripts\ini\Button2Clip.ini"
static Height = ini.get(Config, "General", "Height")
static BB = "Buttonbar"
static BC = "Buttoncount"
static CR = esc(?+\r+, ?+\+)
local i
flag clear 1

if(Ctrl || Stat)
	flag set 1

local D = cl.Create("Dirs", 1)
local Cols = ini.enum_sections(Config) 

if(pproflag(1)) do
	local Rep = pprofolder ++ "ButtonBars.ini"
	local fh = file.open(Rep)

	if(fh <= 0) do
		messagebox("ok error", "File not created", "FILE plugin error #1")
		quit
	endif

	file.close(fh)
	local Bars, Buttons, Counter, j, Temp

	for each line i in Cols
		if(i != "General") do
			.@Read(i)
		else
			.@Read()
		endif

		Counter = v.length
		Bars += Counter
		for(j = 0; j < Counter; j++)
			Temp = ini.get(v[j], BB, BC)
			ini.set(Rep, i, v[j], Temp)
			Buttons += Temp
		endfor
		ini.set(Rep, "Summary", "Bars", Bars) 
		ini.set(Rep, "Summary", "Buttons", Buttons)
	endfor

	Temp = "File " ++ Rep ++ " created" ++ CR ++ CR ++ "Bars: " ++ Bars ++ CR ++ "Buttons: " ++ Buttons
	messagebox("ok", Temp, "Button2Clip script")
	quit
endif

for each line i in Cols
	if(i != "General") do
		D.Insert(0)
		D.AddLeft(0, cb("@Read", i))
		D.SetLabel(0, i)
	endif
endfor

D.Insert(0)
D.AddLeft(0, cb("@Read"))
D.SetLabel(0, "Main Bars")

*menu show Dirs

local Bs = cl.Create("Bars", 1)
Bs.NewProperties("tooltips")

local Number = v.length

for(i = Number - 1; i >= 0; i--)
	Bs.Insert(0)
	Bs.AddLeft(0, cb("@Left", i))
	Temp = file.name(v[i])
	Bs.SetLabel(0, Temp)
	Temp = ini.get(v[i], BB, BC)
	Bs.SetTooltip(0, v[i] ++ "/" ++ Temp ++ " buttons")
endfor

Cols = Number/Height

for(i = 1; i <= Cols; i++)
	Bs.Insert(i*Height)
	Bs.AddLeft(i*Height, "Format NewColumnLine")
endfor

*menu show Bars
quit all

;;**************************************
Function Read(Sec)

local Path
local Mask = "*.bar"
local Temp, Str, List, Elem, Counter
static v

if(not Sec) do
	local hh = win.handle("c=TTOTAL_CMD")
	Path = file.folder(win.exepath(hh))
	Temp = file.listfiles(Path ++ "\" ++ Mask)
	v = vec.createfromlines(Temp)

	if(v <= 0)
		messagebox("ok error", "Vector not created", "VEC plugin error #1")

	quit
endif

v = vec.create(1, 1)

if(v <= 0) do
	messagebox("ok error", "Vector not created", "VEC plugin error #2")
	quit
endif

Str = ini.enum_keys(Config, Sec)

for each line Temp in Str
	Elem = ini.get(Config, Sec, Temp)
	List = file.listfiles(Elem ++ Mask)
	for each line Elem in List
		v[Counter] = Elem
		Counter++
	endfor
endfor

quit

;;**************************************
Function Left(i)
static B = cl.Create("Bar", 1)
B.NewProperties("Tooltips iconsize: 16")
local Source = v[i]
static Items = ini.get(Source, BB, BC)
local i, Pars, Str, Counter

for(i = Items; i >= 1; i--)
	B.Insert(0)
	Str = "TOTALCMD#BAR#DATA" ++ CR

	if(ini.check_exists(Source, BB, "cmd" ++ i) == 2) do
		B.AddLeft(0, "Format Separator")
		continue
	endif

	Temp = ini.get(Source, BB, "cmd" ++ i)
	if(Temp == -2) do
		B.AddLeft(0, "Format NewColumnLine")
		Counter = 0
		continue
	else
		B.AddMiddle(0, Temp)
		Str ++= Temp ++ CR
	endif

	Temp = ini.get(Source, BB, "cmd" ++ i)

	if(ini.check_exists(Source, BB, "param" ++ i) == 3)
		B.AddRight(0, ini.get(Source, BB, "param" ++ i))

	Str ++= B.GetRightCmd(0) ++ CR
	Temp = ini.get(Source, BB, "button" ++ i)
	B.SetIcon(0, Temp, 0)
	Str ++= Temp ++ CR
	Temp = ini.get(Source, BB, "menu" ++ i)
	B.SetLabel(0, Temp)
	Str ++= Temp ++ CR
	B.AddLeft(0, cb("@Clip", i))

	Temp = B.GetRightCmd(0)
	if(ini.check_exists(Source, BB, "path" ++ i) == 3)
		B.AddRight(0, Temp, ini.get(Source, BB, "path" ++ i))

	Str ++= B.GetRightParam(0)
	B.SetTooltip(0, Str)

	if(Counter > Height) do
		B.Insert(0)
		B.AddLeft(0, "Format NewColumnLine")
		Counter = 0
	else
		Counter++
	endif
endfor

*menu show Bar

quit
;;**************************************
Function Clip(Num)
local Str = B.GetTooltip(Num - 1)
clip.set(Str)

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

У меня 74 панели кнопок, не считая "устаревших" и локальных, а также тех, что идут в комплекте с расширенным меню. Если я предвижу, что для определенной работы потребуется одна определенная кнопка, то выношу ее на главную панель, а затем, по завершении работы - стираю. Но добраться до нужной панели бывает непросто: она может находиться на третьем, а то и на четвертом иерархическом уровне.

Данный скрипт позволяет добраться до нужной кнопки в несколько щелчков крысы. После этого в буфер копируется ее образ. Остается вернуться на главную панель (я делаю это по горячей клавише), навести курсор на свободное место, нажать правую кнопку крысы и сказать "Paste". Тот же образ, кстати, легко помещается в текст поста на форуме.

В целом работа скрипта в пояснениях не нуждается. Пути к панелям содержатся в файле настоек. Разделы и ключи можно редактировать, добавлять и удалять. Предполагается, что путь к основным панелям - %COMMANDER_PATH%. Значение ключа Height подбирается экспериментально, чтобы длинное меню не выходило за границы экрана.

Побочная функция скрипта: выдача отчета о всех панелях и числе кнопок на них. Для этого задайте параметр "1" или просто нажмите клавишу Ctrl во время запуска скрипта.


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