Latest post of the previous page:
Приводимый выше пример макроса ReName выявил некоторую несовместимость с новой версией модуля.Вот совместимая
- --[=[ ----------------------------------------------------------------------------------------------
- Макрос для переименования текущего файла - раздельно имя и расширение
- Служит также для демонстрации использования DiaologClass
- v.1.02 (C) Smitis, 2014-2015
- --]=] ----------------------------------------------------------------------------------------------
- local TestAddItem = 6 -- тест: способ добавления элементов диалога
- local TestRename = 0 -- тест: 1 - не делать реального переименования
- local dialog = require 'DialogClass'
- --local dialog = require 'DerivedDialogClass' -- тест для примера наследования
- ----------------------------------------------------------------------------------------------------
- local RENAME_ID = "C6A21A86-96AC-44FF-9046-CAF14EE76CD2"
- local RENAME_GUID = win.Uuid(RENAME_ID)
- local MOVE_ID = "431A2F37-AC01-4ECD-BB6F-8CDE584E5A03" -- стандартный диалог RENAME/MOVE
- local TMPPANEL_ID = "B77C964B-E31E-4D4C-8FE5-D6B0C6853E7C"
- local F = far.Flags
- local cfg = {}
- cfg.HotKeyRename = "" -- хоткей для макроса ReName
- cfg.HotKeyMove = "ShiftF6" -- хоткей для вызова стандартной функции переименования
- cfg.HotKeySwitch = "ShiftF6" -- хоткей макроса переключения диалогов
- cfg.FileNameHistory = "Rename" -- имя истории имён, в оригинальном диалоге используется "Copy"
- cfg.FileExtHistory = "RenameExt" -- имя истории расширений
- cfg.KillDupExt = true -- заменять повторяющиеся расширения на простые (типа .jpg.jpg на .jpg)
- cfg.DialogWidth = 76 -- ширина диалога
- cfg.FileNameRTrim = " ." -- символы, отбрасывамые от имени справа
- cfg.FileNameLTrim = " " -- символы, отбрасывамые от имени слева
- cfg.FileExtRTrim = " ." -- символы, отбрасывамые от расширения справа
- cfg.FileExtLTrim = " ." -- символы, отбрасывамые от расширения слева
- cfg.MoveHist = true -- вести историю в вызываемом стандартном диалоге
- cfg.FileNameChanged = false -- снимать состояние Unchanged для имени файла
- cfg.FileExtChanged = false -- снимать состояние Unchanged для расширения
- ----------------------------------------------------------------------------------------------------
- -- Локализация
- ----------------------------------------------------------------------------------------------------
- local langs = { english = {}, russian = {} }
- langs.english.Title = 'Rename'
- langs.english.FileNamePrompt = 'Change name "%s" to:'
- langs.english.FileExtPrompt = 'Change extension "%s" to:'
- langs.english.OkButton = 'Rename'
- langs.english.CancelButton = 'Cancel'
- langs.russian.Title = 'Переименование'
- langs.russian.FileNamePrompt = 'Изменить имя "%s" на:'
- langs.russian.FileExtPrompt = 'Изменить расширение "%s" на:'
- langs.russian.OkButton = 'Переименовать'
- langs.russian.CancelButton = 'Отменить'
- ----------------------------------------------------------------------------------------------------
- local function ReName_DlgProc(hDlg,Msg,Param1,Param2,D,DI)
- if Msg==F.DN_INITDIALOG then
- DI.FileName:Unchanged(not cfg.FileNameChanged)
- if APanel.Folder then
- DI.FileExt:Enable(false)
- else
- DI.FileExt:Unchanged(not cfg.FileExtChanged)
- end
- end
- end
- ----------------------------------------------------------------------------------------------------
- local function ReName()
- local lang = langs[win.GetEnv("FARLANG"):lower()] or langs.english
- local DW,DH = cfg.DialogWidth,11 -- размеры
- local FileFull = APanel.Current
- local FileCurrent = mf.fsplit(FileFull,12)
- local FileName, FileExt
- if APanel.Folder then
- FileName = FileCurrent
- FileExt = ""
- else
- FileName = mf.fsplit(FileCurrent,4)
- FileExt = mf.fsplit(FileCurrent,8):sub(2)
- end
- local FileNew = ""
- local FileNameOut = FileName:len() <= DW-8-lang.FileNamePrompt:len() and FileName or FileName:sub(1,DW-11-lang.FileNamePrompt:len()).."..."
- local FileExtOut = FileExt:len() <= DW-8-lang.FileExtPrompt:len() and FileExt or FileExt:sub(1,DW-11-lang.FileExtPrompt:len()).."..."
- local FileNamePrompt = lang.FileNamePrompt:format(FileNameOut)
- local FileExtPrompt = lang.FileExtPrompt:format(FileExtOut)
- local Items = {} -- for TestAddItem==0
- local D,DI,DL,DN = dialog.New { Guid=RENAME_GUID, X2=DW, Y2=DH, DlgProc=ReName_DlgProc, Title=lang.Title }
- if TestAddItem == 0 then -- классическая таблица с дополнительными полями
- Items = {
- --{ "DI_DOUBLEBOX", 3, DN(1), DW-4, DH-2, 0, 0, 0, 0, lang.Title },
- { Name="FileNamePrompt", "DI_TEXT", D.LC, DN(1), 0, 0, 0, 0, 0, 0, FileNamePrompt },
- { Name="FileName", "DI_EDIT", D.LC, DN(1), D.RC, 0, 0, cfg.FileNameHistory, 0, "DIF_HISTORY", FileName },
- { Name="FileExtPrompt", "DI_TEXT", D.LC, DN(1), 0, 0, 0, 0, 0, 0, FileExtPrompt },
- { "DI_TEXT", D.LC, DN(1), 0, 0, 0, 0, 0, 0, "." },
- { Name="FileExt", "DI_EDIT", D.LC+1, DN(0), D.RC, 0, 0, cfg.FileExtHistory, 0, "DIF_HISTORY", FileExt },
- { "DI_TEXT", 0, DN(1), 0, 0, 0, 0, 0, "DIF_SEPARATOR" },
- { Name="OK", "DI_BUTTON", 0, DH-3, 0, 0, 0, 0, 0, {DIF_CENTERGROUP=1, DIF_DEFAULTBUTTON=1}, lang.OkButton, },
- { Name="Cancel", "DI_BUTTON", 0, DH-3, 0, 0, 0, 0, 0, {DIF_CENTERGROUP=1}, lang.CancelButton },
- }
- elseif TestAddItem == 1 then -- обычный список
- DI.FileNamePrompt = { "DI_TEXT", D.LC, DN(1), 0, 0, 0, 0, 0, 0, FileNamePrompt }
- DI.FileName = { "DI_EDIT", D.LC, DN(1), D.RC, 0, 0, cfg.FileNameHistory, 0, "DIF_HISTORY", FileName }
- DI.FileExtPrompt = { "DI_TEXT", D.LC, DN(1), 0, 0, 0, 0, 0, 0, FileExtPrompt }
- DI._dot = { "DI_TEXT", D.LC, DN(1), 0, 0, 0, 0, 0, 0, "." }
- DI.FileExt = { "DI_EDIT", D.LC+1, DN(0), D.RC, 0, 0, cfg.FileExtHistory, 0, "DIF_HISTORY", FileExt }
- DI._sep = { "DI_TEXT", 0, DN(1), 0, 0, 0, 0, 0, "DIF_SEPARATOR" }
- DI.OK = { "DI_BUTTON", 0, DH-3, 0, 0, 0, 0, 0, {DIF_CENTERGROUP=1, DIF_DEFAULTBUTTON=1}, lang.OkButton, }
- DI.Cancel = { "DI_BUTTON", 0, DH-3, 0, 0, 0, 0, 0, {DIF_CENTERGROUP=1}, lang.CancelButton }
- elseif TestAddItem == 2 then -- именованные параметры
- DI.FileNamePrompt = { "DI_TEXT", X1=D.LC, YN=1, Text=FileNamePrompt }
- DI.FileName = { "DI_EDIT", X1=D.LC, X2=D.RC, YN=1, History=cfg.FileNameHistory, Text=FileName }
- DI.FileExtPrompt = { "DI_TEXT", X1=D.LC, YN=1, Text=FileExtPrompt }
- DI._dot = { "DI_TEXT", X1=D.LC, YN=1, Text="." }
- DI.FileExt = { "DI_EDIT", X1=D.LC+1, X2=D.RC, History=cfg.FileExtHistory, Text=FileExt }
- DI._sep = { "DI_TEXT", YN=1, Flags="DIF_SEPARATOR" }
- DI.OK = { "DI_BUTTON", YN=1, Flags={DIF_CENTERGROUP=1, DIF_DEFAULTBUTTON=1}, Text=lang.OkButton, }
- DI.Cancel = { "DI_BUTTON", Flags={DIF_CENTERGROUP=1}, Text=lang.CancelButton }
- elseif TestAddItem == 3 then -- сокращённое указание типа и флагов
- DI.FileNamePrompt = { "t+", Text=FileNamePrompt }
- DI.FileName = { "e+", History=cfg.FileNameHistory, Text=FileName }
- DI.FileExtPrompt = { "t+", Text=FileExtPrompt }
- DI._dot = { "t+", Text="." }
- DI.FileExt = { "e", X1=D.LC+1, History=cfg.FileExtHistory, Text=FileExt }
- DI._sep = { "s+" }
- DI.OK = { "b=!+", Text=lang.OkButton }
- DI.Cancel = { "b=", Text=lang.CancelButton }
- elseif TestAddItem == 4 then -- AddItem
- D:AddItem { "t+", Name="FileNamePrompt", Text=FileNamePrompt }
- D:AddItem { "e+", Name="FileName", History=cfg.FileNameHistory, Text=FileName }
- D:AddItem { "t+", Name="FileExtPrompt", Text=FileExtPrompt }
- D:AddItem { "t+", Text="." }
- D:AddItem { "e", Name="FileExt", X1=D.LC+1, History=cfg.FileExtHistory, Text=FileExt }
- D:AddItem { "s+" }
- D:AddItem { "b=!+", Name="OK", Text=lang.OkButton }
- D:AddItem { "b=", Name="Cancel", Text=lang.CancelButton }
- elseif TestAddItem == 5 then -- D.I(), D.Items()
- D.Items { "t+", Name="FileNamePrompt", Text=FileNamePrompt }
- D.Items { "e+", Name="FileName", History=cfg.FileNameHistory, Text=FileName }
- D.Items { "t+", Name="FileExtPrompt", Text=FileExtPrompt }
- D.Items { "t+", Text="." }
- D.Items { "e", Name="FileExt", X1=D.LC+1, History=cfg.FileExtHistory, Text=FileExt }
- D.Items { "s+" }
- D.Items { "b=!+", Name="OK", Text=lang.OkButton }
- D.Items { "b=", Name="Cancel", Text=lang.CancelButton }
- else -- if TestAddItem == 6 then -- DI()
- DI { "t+", Name="FileNamePrompt", Text=FileNamePrompt }
- DI { "e+", Name="FileName", History=cfg.FileNameHistory, Text=FileName }
- DI { "t+", Name="FileExtPrompt", Text=FileExtPrompt }
- DI { "t+", Text="." }
- DI { "e", Name="FileExt", X1=D.LC+1, History=cfg.FileExtHistory, Text=FileExt }
- DI { "s+" }
- DI { "b=!+", Name="OK", Text=lang.OkButton }
- DI { "b=", Name="Cancel", Text=lang.CancelButton }
- end
- local ret = D{Items=Items}
- if ret ~= -1 and ret ~= DI.Cancel.Id then
- FileNew = DI.FileName.Text
- :gsub(cfg.FileNameRTrim and "["..cfg.FileNameRTrim.."%c]+$" or "[%c]+$","")
- :gsub(cfg.FileNameLTrim and "^["..cfg.FileNameLTrim.."%c]+" or "^[%c]+","")
- :gsub('"','')
- FileExt = DI.FileExt.Text
- :gsub(cfg.FileExtRTrim and "["..cfg.FileExtRTrim.."%c]+$" or "[%c]+$","")
- :gsub(cfg.FileExtLTrim and "^["..cfg.FileExtLTrim.."%c]+" or "^[%c]+","")
- :gsub('"',''):gsub('\\+','')
- if not APanelFolder and cfg.KillDupExt and mf.fsplit(FileNew,8):sub(2):lower()==FileExt:lower() and mf.fsplit(FileNew,4)~="" then
- FileNew = mf.fsplit(FileNew,4)
- end
- if FileNew:sub(-1) ~= "\\" then -- если перемещение в папку, расширение игнорируем
- FileNew = FileNew .. (FileExt~="" and "."..FileExt or "")
- end
- if FileCurrent ~= FileNew then
- if TestRename==0 then
- Keys "ShiftF6"
- if Area.Dialog and Dlg.Id==MOVE_ID then
- if not cfg.MoveHist then
- Far.DisableHistory(8)
- end
- Keys "CtrlY"
- print(FileNew)
- Keys "CtrlEnter"
- end
- else
- msgbox("RENAME",FileNew)
- end
- end
- end
- end
- if cfg.HotKeySwitch and cfg.HotKeySwitch~="" then
- Macro {
- description="Switch Rename/Move";
- area="Dialog";
- key=cfg.HotKeySwitch;
- condition=function()
- return Dlg.Id==RENAME_ID or Dlg.Id==MOVE_ID
- end;
- action=function()
- if Dlg.Id==RENAME_ID then
- Keys("Esc ShiftF6")
- else
- Keys("Esc")
- ReName()
- end
- end
- }
- end
- if cfg.HotKeyRename and cfg.HotKeyRename~="" then
- Macro {
- description="Rename";
- area="Shell Search";
- key=cfg.HotKeyRename;
- condition=function()
- local plugid = win.Uuid(panel.GetPanelDirectory(nil,1).PluginId):upper()
- return APanel.Current~=".." and APanel.FilePanel and (not APanel.Plugin or plugid==TMPPANEL_ID)
- end;
- action=ReName
- }
- end
- if cfg.HotKeyMove and cfg.HotKeyMove~="" then
- Macro {
- description="Rename standart";
- area="Shell Search";
- key=cfg.HotKeyMove;
- action=function()
- Keys "ShiftF6"
- end;
- }
- end
GeSHi © Codebox Plus Extension
- --[=[ ----------------------------------------------------------------------------------------------
- Макрос для переименования текущего файла - раздельно имя и расширение
- Служит также для демонстрации использования DiaologClass
- v.1.02 (C) Smitis, 2014-2015
- --]=] ----------------------------------------------------------------------------------------------
- local TestRename = 0 -- тест: 1 - не делать реального переименования
- local dialog = require 'DialogClass'
- --local dialog = require 'DerivedDialogClass' -- тест для примера наследования
- ----------------------------------------------------------------------------------------------------
- local RENAME_ID = "C6A21A86-96AC-44FF-9046-CAF14EE76CD2"
- local RENAME_GUID = win.Uuid(RENAME_ID)
- local MOVE_ID = "431A2F37-AC01-4ECD-BB6F-8CDE584E5A03" -- стандартный диалог RENAME/MOVE
- local TMPPANEL_ID = "B77C964B-E31E-4D4C-8FE5-D6B0C6853E7C"
- local F = far.Flags
- local cfg = {}
- cfg.HotKeyRename = "" -- хоткей для макроса ReName
- cfg.HotKeyMove = "ShiftF6" -- хоткей для вызова стандартной функции переименования
- cfg.HotKeySwitch = "ShiftF6" -- хоткей макроса переключения диалогов
- cfg.FileNameHistory = "Rename" -- имя истории имён, в оригинальном диалоге используется "Copy"
- cfg.FileExtHistory = "RenameExt" -- имя истории расширений
- cfg.KillDupExt = true -- заменять повторяющиеся расширения на простые (типа .jpg.jpg на .jpg)
- cfg.DialogWidth = 76 -- ширина диалога
- cfg.FileNameRTrim = " ." -- символы, отбрасывамые от имени справа
- cfg.FileNameLTrim = " " -- символы, отбрасывамые от имени слева
- cfg.FileExtRTrim = " ." -- символы, отбрасывамые от расширения справа
- cfg.FileExtLTrim = " ." -- символы, отбрасывамые от расширения слева
- cfg.MoveHist = true -- вести историю в вызываемом стандартном диалоге
- cfg.FileNameChanged = false -- снимать состояние Unchanged для имени файла
- cfg.FileExtChanged = false -- снимать состояние Unchanged для расширения
- ----------------------------------------------------------------------------------------------------
- -- Локализация
- ----------------------------------------------------------------------------------------------------
- local langs = { english = {}, russian = {} }
- langs.english.Title = 'Rename'
- langs.english.FileNamePrompt = 'Change name "%s" to:'
- langs.english.FileExtPrompt = 'Change extension "%s" to:'
- langs.english.OkButton = 'Rename'
- langs.english.CancelButton = 'Cancel'
- langs.russian.Title = 'Переименование'
- langs.russian.FileNamePrompt = 'Изменить имя "%s" на:'
- langs.russian.FileExtPrompt = 'Изменить расширение "%s" на:'
- langs.russian.OkButton = 'Переименовать'
- langs.russian.CancelButton = 'Отменить'
- ----------------------------------------------------------------------------------------------------
- local function ReName_DlgProc(hDlg,Msg,Param1,Param2,D,DI)
- if Msg==F.DN_INITDIALOG then
- DI.FileName:Unchanged(not cfg.FileNameChanged)
- if APanel.Folder then
- DI.FileExt:Enable(false)
- else
- DI.FileExt:Unchanged(not cfg.FileExtChanged)
- end
- end
- end
- ----------------------------------------------------------------------------------------------------
- local function ReName()
- local lang = langs[win.GetEnv("FARLANG"):lower()] or langs.english
- local DW,DH = cfg.DialogWidth,11 -- размеры
- local FileFull = APanel.Current
- local FileCurrent = mf.fsplit(FileFull,12)
- local FileName, FileExt
- if APanel.Folder then
- FileName = FileCurrent
- FileExt = ""
- else
- FileName = mf.fsplit(FileCurrent,4)
- FileExt = mf.fsplit(FileCurrent,8):sub(2)
- end
- local FileNew = ""
- local FileNameOut = FileName:len() <= DW-8-lang.FileNamePrompt:len() and FileName or FileName:sub(1,DW-11-lang.FileNamePrompt:len()).."..."
- local FileExtOut = FileExt:len() <= DW-8-lang.FileExtPrompt:len() and FileExt or FileExt:sub(1,DW-11-lang.FileExtPrompt:len()).."..."
- local FileNamePrompt = lang.FileNamePrompt:format(FileNameOut)
- local FileExtPrompt = lang.FileExtPrompt:format(FileExtOut)
- local D,DI,DL,DN = dialog.New { Guid=RENAME_GUID, X2=DW, Y2=DH, DlgProc=ReName_DlgProc, Title=lang.Title }
- DI { "t+", Name="FileNamePrompt", Text=FileNamePrompt }
- DI { "e+", Name="FileName", History=cfg.FileNameHistory, Text=FileName }
- DI { "t+", Name="FileExtPrompt", Text=FileExtPrompt }
- DI { "t+", Text="." }
- DI { "e", Name="FileExt", X1=D.LC+1, History=cfg.FileExtHistory, Text=FileExt }
- DI { "s+" }
- DI { "b=!+", Name="OK", Text=lang.OkButton }
- DI { "b=", Name="Cancel", Text=lang.CancelButton }
- local ret = D()
- if ret ~= -1 and ret ~= DI.Cancel.Id then
- FileNew = DI.FileName.Text
- :gsub(cfg.FileNameRTrim and "["..cfg.FileNameRTrim.."%c]+$" or "[%c]+$","")
- :gsub(cfg.FileNameLTrim and "^["..cfg.FileNameLTrim.."%c]+" or "^[%c]+","")
- :gsub('"','')
- FileExt = DI.FileExt.Text
- :gsub(cfg.FileExtRTrim and "["..cfg.FileExtRTrim.."%c]+$" or "[%c]+$","")
- :gsub(cfg.FileExtLTrim and "^["..cfg.FileExtLTrim.."%c]+" or "^[%c]+","")
- :gsub('"',''):gsub('\\+','')
- if not APanelFolder and cfg.KillDupExt and mf.fsplit(FileNew,8):sub(2):lower()==FileExt:lower() and mf.fsplit(FileNew,4)~="" then
- FileNew = mf.fsplit(FileNew,4)
- end
- if FileNew:sub(-1) ~= "\\" then -- если перемещение в папку, расширение игнорируем
- FileNew = FileNew .. (FileExt~="" and "."..FileExt or "")
- end
- if FileCurrent ~= FileNew then
- if TestRename==0 then
- Keys "ShiftF6"
- if Area.Dialog and Dlg.Id==MOVE_ID then
- if not cfg.MoveHist then
- Far.DisableHistory(8)
- end
- Keys "CtrlY"
- print(FileNew)
- Keys "CtrlEnter"
- end
- else
- msgbox("RENAME",FileNew)
- end
- end
- end
- end
- if cfg.HotKeySwitch and cfg.HotKeySwitch~="" then
- Macro {
- description="Switch Rename/Move";
- area="Dialog";
- key=cfg.HotKeySwitch;
- condition=function()
- return Dlg.Id==RENAME_ID or Dlg.Id==MOVE_ID
- end;
- action=function()
- if Dlg.Id==RENAME_ID then
- Keys("Esc ShiftF6")
- else
- Keys("Esc")
- ReName()
- end
- end
- }
- end
- if cfg.HotKeyRename and cfg.HotKeyRename~="" then
- Macro {
- description="Rename";
- area="Shell Search";
- key=cfg.HotKeyRename;
- condition=function()
- local plugid = win.Uuid(panel.GetPanelDirectory(nil,1).PluginId):upper()
- return APanel.Current~=".." and APanel.FilePanel and (not APanel.Plugin or plugid==TMPPANEL_ID)
- end;
- action=ReName
- }
- end
- if cfg.HotKeyMove and cfg.HotKeyMove~="" then
- Macro {
- description="Rename standart";
- area="Shell Search";
- key=cfg.HotKeyMove;
- action=function()
- Keys "ShiftF6"
- end;
- }
- end
GeSHi © Codebox Plus Extension