Здравствуйте,
buniak_a_h, теперь я Дмитрий. Решил, что мне лучше здесь без анонимности.
У меня иные ощущения: API неизвестно когда отладят, глючит, клавиши — навсегда. Это "системные вызовы". Потому предпочитаю Keys('CtrlU'), а не Editor.Sel(4). Это и нагляднее, проще испытать.
Разница между SetStr и print вместе с Keys('CtrLV') в том, что SetStr может вставить знаки конца строки, а редактор это не интерпретирует. Напротив: print работает надёжно, во всём ожидаемо. Включая интерпретацию специальных знаков.
Вот ещё от меня пример:
Code: Select all
Macro { key = 'ShiftBS'; area = 'Common'; description = 'XLat: QWERTY-ЙЦУКЕН выделения или слова и смена языка ввода ОС';
action = function()
if Area.Editor then
if not Object.Selected then Keys('CtrlShiftLeft') end
if Object.Selected then
local s = mf.xlat(Editor.SelValue, 1)
if s and 0 < #s then Editor.Undo(0) Keys('CtrlD') print(s) s = nil Editor.Undo(1) end
end
elseif Area.Dialog then
if not Object.Selected then Keys('CtrlShiftLeft') end
local s = Dlg.GetValue() local p1 = 1 local p2 = #s
if Object.Selected then p1 = Editor.Sel(0, 1) p2 = Editor.Sel(0, 3) end
Editor.Undo(0) Keys('CtrlD') s = mf.xlat(s:sub(p1, p2), 1) print(s) s = nil Editor.Undo(1)
elseif Area.Shell then
if not Object.Selected and not Object.Empty then Keys('CtrlShiftLeft') end
Keys('XLat') if Object.Selected then Editor.Sel(1, 1) end -- Выделение не убираю, так как откатки в коммандной строке нет.
else Keys('XLat WinSpace') end -- После XLat смена языка ввода средствами ОС Windows 10.
end }
Я решил переписать корректнее старый макрос для xlat. Так, чтобы он работал ожидаемо. И тут помогает именно print. Вышло неожиданно для меня громоздко. Может быть, маловато опыта. Наверное, надо разделить на 4 макроса для областей. Но я, по правде, не могу их уверенно перечислить, зато есть else.