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