buniak_a_h wrote: ↑Wed 10 Feb, 2021 01:46
Этот скрипт только получает то, что есть в диалоге. Независимо от того, виден элемент, или нет. Чем вызван диалог - нажатием F7 в редакторе, или F6 в панели - для него значения не имеет.
F7 есть только в редакторе. Макрос исполняется в редакторе тоже. Ну нет смысла лезть.
С аргументами я давно разобрался. Спасибо вам ещё раз. Пишите тому, кто не стал.
Дмитрий Журко wrote: ↑Wed 10 Feb, 2021 01:05
Да, мне не сразу пришло на ум, что arg могли упустить, оставив работу с ...
`arg` не упускали, он просто для другого служит.
Дмитрий Журко wrote: ↑Wed 10 Feb, 2021 01:16
Далее по более простому поводу (поиск по словам) пришлось изгаляться намного сильнее. И в диалоги лезть, и вручную перерисовывать,
Тут не могу прокомментировать, но не исключено, что для чего-то существуют и более простые пути.
Спрашивайте, если сомневаетесь в чём-то.
John Doe wrote: ↑Wed 10 Feb, 2021 09:46
`arg` не упускали, он просто для другого служит.
Я полагаю тему исчерпанной. Автор приведённого вами учебника lua не считает, что arg для другого. Но спорить уже не буду, достаточно всем.
John Doe wrote: ↑Wed 10 Feb, 2021 09:46
Тут не могу прокомментировать, но не исключено, что для чего-то существуют и более простые пути.
Спрашивайте, если сомневаетесь в чём-то.
Я и спрашиваю. Сомневаюсь, что кто-то даст ответ на не наглядно заданный вопрос. А чтоб наглядно, нужно пользоваться поиском так, как я пытаюсь. А вероятно, написать то, что я уже написал. Мне советовали уже не раз код, который тупо не работает. Или хотя бы испытать заполнение колоночного блока (удобная возможность, которая есть в других редакторах, произвольная псевдографика). Наверное, для того чтобы задать такой вопрос тем, кто смотреть и критиковать мой код не станет, нужно привести выжимку, касающуюся только этого. Не сегодня.
localfunction stay (freeze)-- Использовать: stay(0) запоминает № строки и её положение в окне, stay() восстанавливает, если № не изменился.
if freeze then stayfocus ={ E.Pos(0,1), E.Pos(0,4)}returnend
ifnot stayfocus thenreturnend-- Чтобы не искать место, куда убежала строка, когда только клавишу поиска нажал, а поиск не нашёл.
if stayfocus[1]~= E.Pos(0,1)or stayfocus[2]== E.Pos(0,4)thenreturnend
local p, x = B.get(), E.Pos(0,2) E.Pos(1,4, stayfocus[2]) E.Pos(1,2, x) B.set(p) stayfocus =nil
end-- stay (freeze) -- Сохранил блок, установил фокус, восстановил блок.
PS И простите, я вам писал, что в stay используется в jr.block, уже нет. Но используется в jr.F7 — работа с Поиском Редактора. Пример там короче, но менее наглядный. Без того там "подробностей".
PPS Внезапно для меня все мои недоразумения разрешились. Всё работает и упростилось.
Last edited by Дмитрий Журко on Mon 15 Feb, 2021 00:33, edited 6 times in total.
Дмитрий Журко wrote: ↑Wed 10 Feb, 2021 10:02
Автор приведённого вами учебника lua не считает, что arg для другого.
Тут необходимо уточнить одну важную вещь: редакция учебника, что доступна по ссылке, написана ещё для 5.0, поэтому некоторые моменты могут и отличаться. Но это в целом, а та статью, на которую я ссылался, вполне однозначна, и arg не упоминает. оказывается действительно упоминает.
Если же вам интересно разобраться именно с arg, то давайте ссылку, обсудим и это.
John Doe wrote: ↑Wed 10 Feb, 2021 10:30
Если же вам интересно разобраться именно с arg, то давайте ссылку, обсудим и это.
Теперь мне интересно эффективно сделать так, чтобы последователи не тратили время на это несоответствие учебнику. Возможность есть, она выглядит чуть иначе, но компьютер чуть не понимает. Мне надо подумать о наиболее действенном пути для этой цели.
Нашлось немного времени посмотреть обнародованные скрипты.
И мне они показались интересными и полезными. Особенно jr.typographic и jr.F4.Rus. Присмотрюсь к ним повнимательнее на практике и потом сделаю более основательные выводы.
Множество (около 30) ключей к макросам в jr.F4.Rus, каждый из которых желательно бы помнить, лично меня смутило. Поэтому я сделал следующее. В файле произвёл замену key = ' на key = 'F4’; key2 = ' и таким образом повесил весь набор этих макросов на один и тот же ключ. Т.е. воспользовался одним из замечательных свойств меню выбора макроса и вывел множество макросов в одно меню.
А т.к. я уже несколько лет с большой пользой применяю замечательно эффективный модуль
Найти key2Process.lua можно по ссылке. А затем этот модуль нужно положить в %FarProfile%\Macros\modules\ и в файл _macroinit.lua внести следующую запись:
local _,Add_key2 = pcall(require,"key2Process")
if type(Add_key2)=="table" then Macro(Add_key2.macro) Add_key2.init() end
--Если key2Process.lua (автор IgorZ https://forum.farmanager.com
/viewtopic.php?p=152518#p152518) лежит не непосредственно в каталоге "Modules", исправьте путь.
, то у меня получилось весьма работоспособное меню.
Любой из представленных в этом меню макросов можно активировать либо примитивно установив курсор на строке с его названием и нажав Enter, либо нажав соответствующую цифру или букву, расположенную в строке макроса слева, или нажав соответствующий хоткей или шорткат, обозначенный в строке справа. Как кому привычнее и удобнее. А из своего опыта лично я убедился в том, что предпочтительнее пользоваться теми клавишами, которые обозначены в строке справа.
Можно ещё заметить, что это меню удобно использовать и не только по прямому назначению. А даже и просто как краткую справку по макросам, входящим в jr.F4.Rus. Просто нажав в редакторе F4.
И попутно имеется малюсенькое
Мне кажется, что Ctrl`.lua несколько недоделан. Ведь разве в Plugin.Menu() не нужно указывать 2 аргумента, т.е. кроме Guid ещё и MenuGuid:
Ann wrote: ↑Fri 12 Feb, 2021 15:57
Нашлось немного времени посмотреть обнародованные скрипты.
Ну, с почином меня! Спасибо за то, что вы есть, за потраченное время и особенно за все замечания.
Ann wrote: ↑Fri 12 Feb, 2021 15:57
каждый из которых желательно бы помнить, лично меня смутило.
Меня это тоже смущает. Я уже приделал вчера меню к typographic и ColorWord со справками. О том как делать меню узнал три дня назад. Сегодня пришлю сюда обновление. Намерен расширить свои задачи, а пока оттачиваю технологию взаимодействия с пользователем, который не обязан угадать мои мысли и писать мне не будет.
Спасибо. Пожалуйста, не надо беречь мою гордыню, фиг с ней давно. Если у вас есть ощущение неудобства, пожалуйста, опишите как угодно. Дело в том, что я был намерен сделать продукт и не уверен, что он уже готов. Сам использую чужие продукты, когда они "по душе", не всегда зная, как это описать. Тут субъективное очень важно.
К тому ещё, новый API FAR и lua я стал изучать лишь более месяца назад (странно, что надо так долго изучать среду макросов, но это о другом). Все советы использую.
Ann wrote: ↑Fri 12 Feb, 2021 15:57
Можно ещё заметить, что это меню удобно использовать и не только по прямому назначению. А даже и просто как краткую справку по макросам, входящим в jr.F4.Rus. Просто нажав в редакторе F4.
Пока не сделал, но идея очень нравится. Хочу сделать так, чтобы после не переделывать.
А вот почти всё предыдущее ревизовал, многое переписал. Сегодня выложил в первом сообщении темы. Буду очень рад любым замечаниям, даже непрожёванным.
Дмитрий Журко wrote: ↑Tue 16 Feb, 2021 19:17обнаружил ошибку ... Сейчас заменю публикацию
Спасибо. Перекачал. Намерен смотреть, но по времени это будет с учётом ситуации с оперативной загрузкой по службе и c гораздо более приоритетным восхитительным SaveContext`ом.
Ann wrote: ↑Wed 17 Feb, 2021 02:55
Спасибо. Перекачал. Намерен смотреть, но по времени это будет с учётом ситуации с оперативной загрузкой по службе и c гораздо более приоритетным восхитительным SaveContext`ом.
Упс! Рано перекачали. Разбираюсь с новой для меня напастью: изменения в модулях (скажем, переименование функций) наслаиваются, а не обновляются. То есть, если я передумал называть функцию gap, она стала align, то gap останется в package.preload и будет работать. Но только у меня, который использовал gap, а у вас не будет! То есть я испытал все возможности, а они, как оказалось, работают отчасти в старой для меня среде. Решение я нашёл, но нынешний код не годится.
И спасибо за ответ. Я бы просто смолчал, а это неправильно. За рекомендацию тоже благодарю, хотя мне такая возможность, видимо, не нужна совсем. Но код почитаю. Потом, когда закончу повторное испытание своего.
Macro { key = ''; area = 'Common'; description = '¡Reload all macroses!';
action = function()
Keys('F12') local i = Menu.Value:sub(1, 1) Keys('1 Esc') if Area.Shell then print('macro: load') end
package.loaded = { } -- Эти присваивания полностью (?) обновляют сведения о глобальной среде исполнения Lua.
package.preload = { }
if Area.Shell then Keys('Enter F12') Keys(i) end
end }
Я его положил в macro без клавиши. Вызываю через Macro browser.
PS Кстати, мне этот макрос стал постоянно полезен для отладки.
Last edited by Дмитрий Журко on Wed 17 Feb, 2021 15:01, edited 5 times in total.
Shmuel wrote: ↑Wed 17 Feb, 2021 12:48
LuaMacro не использует package.preload (за исключением кода MoonScript, который вряд ли взаимодействует с кодом автора темы).
Отвечу я, Журко. Luamacro не работает с package.preload, с ней работает Lua, require. Переименование глобальной переменной, например, функции, порождает лишь ещё один её экземпляр в preload с новым именем. Просто об этом стоит помнить. Я даже читал, но сначала не понял, как именно это реализовано, что loaded и preload это просто таблицы. В учебнике не конкретно.