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