EditFileComments

Название EditFileComments
Имя файла (*.txt) EditFileComments.txt
Описание Производит однотипное изменение описаний файлов в текущей директории
Автор Вахмурка
Параметры -
Вызываемые плагины file, win, clip, vec
Иконка
Версия 4.2
Дата обновления 28.10.19

static hwnd = win.handle("c=TTOTAL_CMD")
local ActivePanel = win.sendmessage(hwnd, 0x400+50, 1000, 0)
static Counter = win.sendmessage(hwnd, 0x400+50, 1004 + ActivePanel, 0)
local Current = win.sendmessage(hwnd, 0x400+50, 1006 + ActivePanel, 0)
static Updir = win.sendmessage(hwnd, 0x400+50, 1008 + ActivePanel, 0)
static Slash = "\"
static ENCF = "ERROR: no comment file"
static CurPath = file.folder(win.gettext(win.sendmessage(hwnd, 0x400+50, 8 + ActivePanel, 0))) ++ Slash

if(!Current && Updir) do
	local DirComment = .Subs\Sub_Descript_ion(CurPath, "..", 0, "g")
	if(DirComment == ENCF)
		DirComment = ""

	flag clear 1
else
	if(Counter < 2) do
		win.postmessage(hwnd, 0x400+51, 2700, 0)
		quit
	endif

	flag set 1
	clip.save
	clip.clear
	win.sendmessage(hwnd, 0x400+51, 2018, 0)
	wait.for(clip.get)
	static List = clip.get
	clip.clear
	wait.for(!clip.get)
	clip.load
endif

local RadioButtons = 3
static Active = 3
static Quote = ?+"+
static EFCS = "'EditFileComments' script"
static R = cl.Create("Radio", 1)
local Width = 150
static Off = "e:\Storage\Graphics\Icons\Visual Basic\MISC13.ICO"
static On = "e:\Storage\Graphics\Icons\Visual Basic\MISC14.ICO"
local CS = "@ChangeState"
static T = "Text"
static EndComment = esc(?+\x04+, ?+\+) ++ esc(?+\xC2+, ?+\+)
local i

R.Insert(0)
R.SetLabel(0, ?+*control button center "Close"+)
R.AddLeft(0, "*bar close Radio")

R.Insert(0)
R.SetLabel(0, ?+*control button center "OK"+)
R.AddLeft(0, cb("@OK"))

R.Insert(0)
R.SetLabel(0, ?+*control button autocheckbox "\ is a newline char"+)
R.SetId(0, "Newline")
R.SetHeight(0, 30)

R.Insert(0)
R.SetLabel(0, "Instead")
R.AddLeft(0, cb(CS, 3))

R.Insert(0)
R.SetLabel(0, "After")
R.AddLeft(0, cb(CS, 2))

R.Insert(0)
R.SetLabel(0, "Before")
R.AddLeft(0, cb(CS, 1))
R.SetId(0, "Radio1")

R.Insert(0)
R.SetLabel(0, "*control edit left autohscroll clientedge")
R.SetId(0, T)

if(pproflag(1)) do
	R.Insert(0)
	local Text = "List " ++ Counter ++ " files..."
	R.SetLabel(0, "*control button " ++ Quote ++ Text ++ Quote)
	R.AddLeft(0, cb("@FileList"))
endif

R.SetWidth(0, Width)

static Radio1 = R.GetIdIndex("Radio1")

R.SetProperties("Format=barsize samesize flat vertical border iconsize: 16 topmost 3DFrame No3DColor")

for(i = Radio1; i <= Radio1 + RadioButtons; i++)
	R.SetIcon(i, Off)
	R.SetEnabled(i, 0)
endfor

R.SetIcon(Radio1 + RadioButtons - 1, On)

R.show

win.setfocus(R.GetCtrlHandle(R.GetIdIndex(T)))

if(DirComment)
	R.SetCtrlValue(T, DirComment)

quit
//=================================================
Function ChangeState(Num)
R.SetIcon(Active + Radio1 - 1, Off)
R.SetIcon(Num + Radio1 - 1, On)
Active = Num
R.show
quit
//=================================================
Function OK
local Result, Item, Path, Name
local Str = R.GetCtrlValue(T)
local NewLine = R.GetCtrlValue("NewLine")
local v = vec.createfromwords("b a s")

R.close

if(not Str) do
	Item = ""
		*Exec Prompt 2 Comment string is empty. Delete old comments?

		if(pproflag(2)) do
			R.show
		else
			quit
		endif
endif

if(find(Str, Slash) != -1 && NewLine)
	Str = replacechars(Str, Slash, "\n") ++ EndComment

local Par = ifelse(Result == 6, "d", v[Active - 1])

if(pproflag(1)) do
	for each line Item in List
		Result = file.isfolder(Item)
		Path = file.folder(remove(Item, -1*Result)) ++ Slash
		Name = file.nametype(remove(Item, -1*Result))
		.Subs\Sub_Descript_ion(Path, Name, Str, Par)
	endfor
else
	.Subs\Sub_Descript_ion(CurPath, "..", Str, Par)
endif

wait.for(50)
win.setfocus(hwnd)
win.sendmessage(hwnd, 0x400+51, 540, 0)
quit
//=================================================
Function FileList
local Item, Text, Mess, i, FiF
static TabChar = esc(?+\t+, ?+\+)
static CR = esc(?+\r+, ?+\+)

for(i = 1; i <= Counter; i++)
	Item = line(List, i)
	FiF = file.isfolder(Item)
	Path = file.folder(remove(Item, -1*FiF)) ++ Slash
	Name = file.nametype(remove(Item, -1*FiF))
	Text = .Subs\Sub_Descript_ion(Path, Name, 0, "g")
	Mess ++= i ++ ": " ++ TabChar ++ Item

	if(Text && Text != ENCF)
		Mess ++= CR ++ TabChar ++ "Comment: " ++ TabChar ++ Text

	Mess ++= CR
endfor

Mess = replacechars(Mess, EndComment, "")
Mess = replacechars(Mess, "\n", CR ++ repeat(TabChar, 3))
Mess = remove(Mess, -1)

messagebox("ok information", Mess, EFCS)

quit

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

Однажды мне понадобилось отредактировать комментарии (те, которые в файле descript.ion) сразу к нескольким файлам, и я с удивлением обнаружил, что Total Commander такой возможности не предоставляет - только текущий, и только один. А жаль. Ну что же, дело поправимо. Если мне от Total Commander нужна функция, которой его не снабдили, я пишу скрипт PowerPro.

Преимущества скрипта в том, что если на панели ничего не выделено, то скрипт просто отработает команду cm_EditComment. Поэтому имеет полный смысл присвоить вызову скрипта клавиатурную комбинацию Ctrl+Z. Если вам не потребуется редактировать несколько описаний, то и разницы вы не заметите. А вот в противном случае вспомните меня добрым словом.

Итак, если выделено несколько файлов, появится следующее диалоговое окно:

Верхняя кнопка, во-первых, напоминает о том, сколько файлов выделено (в данном случае 4). Во-вторых, при нажатии на нее будет выдана подробная информация о выделенных файлах, включая комментарии к ним, если они есть.

В поле ниже вводится произвольная строка, но можно оставить ее и пустой. Это значит, что комментарии к выделенным файлам, если они есть, будут удалены. После подтверждения, разумеется.

Далее задаем, куда комментарий будет вставлен – до существующего комментария (Before), после него (After) или вместо него (Instead). Последний выбор предполагается по умолчанию.

Флаг "\ is a newline char" позволяет задавать многострочные комментарии. Если флаг установлен, то символ обратного слэша в тексте комментария будет означать начало новой строки. Символ конца многострочного комментария будет добавлен автоматически.

Еще одна функция скрипта – редактирование комментария к текущей директории в целом. Нечто подобное было реализовано в Norton Commander'е с помощью файла dirinfo. В ТС комментарий к директории выдается в качестве всплывающей подсказки, если навести курсор на строку updir (верхняя строка ".." директории). При этом штатных средств редактирования комментария к директории ТС не предоставляет! Мало того, данная функция вообще не документирована.

Для редактирования комментария к директории нужно установить курсор на строку updir и запустить скрипт. Разумеется, кнопки со списком файлов в появившемся окне не будет.


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