Пересобрал DialogTools из последних исходников в GCC 5.30, ну и глянул Dialog_DialogTools.lua штука замечательная, но там не было только копирования пароля в буфер обмена как у Dialog_PSWEdit.lua написанного John Doe. Решил дополнить этот момент взяв скрипт
John_Doe за прототип (надеюсь уважаемый
John Doe не будет возражать против использования части его кода) - объединение возможностей скриптов прямо напрашивалось. Вот что вышло [more=Dialog_DialogTools.lua]-- See
http:// forum.farmanager.com/viewtopic.php?p=136132#p136132
-- We complete password copy function to the clipboard directly
-- from under the asterisks (based on John Doe code and idea). /VictorVG/
local DLGITEMTYPE_EDIT, DLGITEMTYPE_PSWEDIT, DLGITEMTYPE_FIXEDIT = 4, 5, 6
local DialogTools_MainGuid = "B2EC2264-0F55-4B86-87F7-F1392B8FC5DC"
local DialogTools_SrchGuid = "40E53FB1-6291-45a1-9DDF-B4A2048CA6BA"
local DialogTools_RplcGuid = "F4C58B97-BA69-4814-9FC9-DAB9307C0E88"
local DialogTools_UndoGuid = "1117C0E3-76BA-443D-90E3-89D20C45F364"
local DialogTools_EditGuid = "D0C5118D-E750-4E00-A4D4-0E0E0063571F"
local DialogTools_PwShGuid = "C8D4D4A4-943B-436F-8414-D36CBAF37C53"
local F = far.Flags
local function inEditField()
return Dlg.ItemType == DLGITEMTYPE_EDIT or Dlg.ItemType == DLGITEMTYPE_FIXEDIT
end
local function callUndoRedo( stepKey )
Plugin.Menu( DialogTools_MainGuid, DialogTools_UndoGuid )
Keys( stepKey .. ' ' .. 'Enter' )
end
local function copyPwd()
local pwd,hDlg,CurPos
Plugin.Menu( DialogTools_MainGuid, DialogTools_EditGuid )
hDlg = far.AdvControl(F.ACTL_GETWINDOWINFO).Id
CurPos = hDlg:send(F.DM_GETFOCUS)
local item = hDlg:send(F.DM_GETDLGITEM,CurPos)
if item and item[1]==F.DI_PSWEDIT then
pwd = hDlg:send(F.DM_GETTEXT,CurPos);
end
far.CopyToClipboard(pwd)
end
Macro {
description = "DialogTools: Search";
area = "Dialog"; key = "F7";
condition = inEditField;
action = function() Plugin.Menu( DialogTools_MainGuid, DialogTools_SrchGuid ) end
}
Macro {
description = "DialogTools: Replace";
area = "Dialog"; key = "CtrlF7";
condition = inEditField;
action = function() Plugin.Menu( DialogTools_MainGuid, DialogTools_RplcGuid ) end
}
Macro {
description = "DialogTools: Undo";
area = "Dialog"; key = "CtrlZ AltBS";
condition = inEditField;
action = function() callUndoRedo( '' ) end
}
Macro {
description = "DialogTools: Redo";
area = "Dialog"; key = "CtrlShiftZ AltShiftBS";
condition = inEditField;
action = function() callUndoRedo( 'Up' ) end
}
Macro {
description = "DialogTools: Edit";
area = "Dialog"; key = "F4";
condition = inEditField;
action = function() Plugin.Menu( DialogTools_MainGuid, DialogTools_EditGuid ) end
}
Macro {
description = "DialogTools: Show password";
area = "Dialog"; key = "F3";
condition = function() return Dlg.ItemType == DLGITEMTYPE_PSWEDIT end;
action = function() Plugin.Menu( DialogTools_MainGuid, DialogTools_PwShGuid ) end
}
Macro{
description="DialogTools: Copy pasword";
area="Dialog"; key="CtrlIns";
condition=function() return Dlg.ItemType == DLGITEMTYPE_PSWEDIT end;
action=function() copyPwd() end;
}[/more]. Проверил luacheck 0.14 - он ошибок - варнингов не вывел, у меня с обновлённым вариантом так же не вылезло подводных камней. Ну а редактирование паролей - F4, хотя сначала сиё и не очевидно, но пароль по большому счёту это то же текстовое поле, так что...
Ну а сам пошёл свои исходники править - Dialog_PSWEdit.lua за ненадобностью будет удалён в текущей версии сборок! В х64 его уже нет, но macro.txt я её не переделал - будет позднее вместе с FarUE3 x86.