EditFileComments

Title EditFileComments
File Name EditFileComments.txt
Description Edit descriptions for group of files
Author Vochomurka
Parameters -
Plugins Called file, win, clip, vec
Icon
Version 4.2
Updated on 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

Comments:

One day it was required to edit descriptions for several files rather than for one. I was amazed to learn that Total Commander doesn't give such opportunity. I think it's an annoying defect, but it can be eliminated by means of PowerPro.

The script is developed in such a way that if there is no group selected, then the cm_EditComment command is executed. Thus, it is a good idea to assign the Ctrl+Z hotkey to the script. If you will never have the necessity to edit many descriptions, you will not learn the difference between running the script and the command. But, if you ever have such need, I will be glad to help you with my script.

So, when some files are selected, the following dialog window appears:

Upper button informs about the total number of files selected (4 on the screenshot). After pressing the button the detailed information about files will be shown.

Type the comment in the edit box below, or leave it empty. In the latter case the comments, if any, for selected files will be deleted after confirmation. Below you can choose where to put the new comment relative to the old one (if any) - before, after or instead (default).

The "\ is a newline char" flag allows to set multiline comments. If this flag is set, then the backslash character in the comment body is treated as a newline character.

One more function of the script – editing the comment for the whole directory. This comment is displayed in the popup window when hovering the mouse over the updir line (the ".." line on top of the file list). Total Commander does not provide any means to edit this comment. Moreover, this feature is undocumented.

To edit directory comment, place cursor on updir and run the script. Of course, there will be no "List…" button in this dialog box.


All Scripts Total Commander TotalCmd.net PowerPro