Макросы для редактора Журко

Здесь обсуждается всё, что касается макросов.
Дмитрий Журко
Posts: 81
Joined: Tue 19 Jan, 2021 21:49
Has thanked: 25 times
Been thanked: 1 time

Макросы для редактора Журко

Post by Дмитрий Журко »

Latest post of the previous page:

buniak_a_h wrote: Wed 10 Feb, 2021 01:46 Этот скрипт только получает то, что есть в диалоге. Независимо от того, виден элемент, или нет. Чем вызван диалог - нажатием F7 в редакторе, или F6 в панели - для него значения не имеет.
F7 есть только в редакторе. Макрос исполняется в редакторе тоже. Ну нет смысла лезть.

С аргументами я давно разобрался. Спасибо вам ещё раз. Пишите тому, кто не стал.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Макросы для редактора Журко

Post by John Doe »

Дмитрий Журко wrote: Wed 10 Feb, 2021 01:05 Да, мне не сразу пришло на ум, что arg могли упустить, оставив работу с ...
`arg` не упускали, он просто для другого служит.
Дмитрий Журко wrote: Wed 10 Feb, 2021 01:16 Далее по более простому поводу (поиск по словам) пришлось изгаляться намного сильнее. И в диалоги лезть, и вручную перерисовывать,
Тут не могу прокомментировать, но не исключено, что для чего-то существуют и более простые пути.
Спрашивайте, если сомневаетесь в чём-то.
https://t.me/FarManager — Telegram чат
Дмитрий Журко
Posts: 81
Joined: Tue 19 Jan, 2021 21:49
Has thanked: 25 times
Been thanked: 1 time

Макросы для редактора Журко

Post by Дмитрий Журко »

John Doe wrote: Wed 10 Feb, 2021 09:46 `arg` не упускали, он просто для другого служит.
Я полагаю тему исчерпанной. Автор приведённого вами учебника lua не считает, что arg для другого. Но спорить уже не буду, достаточно всем.
John Doe wrote: Wed 10 Feb, 2021 09:46 Тут не могу прокомментировать, но не исключено, что для чего-то существуют и более простые пути.
Спрашивайте, если сомневаетесь в чём-то.
Я и спрашиваю. Сомневаюсь, что кто-то даст ответ на не наглядно заданный вопрос. А чтоб наглядно, нужно пользоваться поиском так, как я пытаюсь. А вероятно, написать то, что я уже написал. Мне советовали уже не раз код, который тупо не работает. Или хотя бы испытать заполнение колоночного блока (удобная возможность, которая есть в других редакторах, произвольная псевдографика). Наверное, для того чтобы задать такой вопрос тем, кто смотреть и критиковать мой код не станет, нужно привести выжимку, касающуюся только этого. Не сегодня.
  1. local function fill (t, w) --   Заполнить вертикальный блок текстом t на ширину w.
  2.  
  3.     p = B.get() bob(-1) --  Если w нет, то повторы t в каждой строке, если w — 0, то усечённые до прежней ширины блока повторы t.
  4.  
  5.     t = t:gsub('[\r\n]', '') --     Табуляции в ширине не вычисляются. И так хорошо.
  6.  
  7. if not (t and 0 < t:len() and p and p.vert) then return end -- assert
  8.  
  9.     if w and w == 0 then w = p[4] - p[2] t = t:rep(math.modf(w/t:len()) + 1):sub(1, w) end
  10.  
  11.     E.Undo(0) --            Целочисленное деление // todo в Lua 5.3.
  12.  
  13.     stay(0) --[[!!! Вызов, чтобы запомнить положение на экране до действия!!!]]
  14.  
  15.     for n = p[1], p[3] do
  16.  
  17.         E.Pos(1, 1, n) Keys('End') local len = E.CurPos
  18.  
  19.         E.Pos(1, 3, p[4]) bob(0) len = E.CurPos < len and len or nil
  20.  
  21.         E.Pos(1, 3, p[2]) eob(0) -- Первая колонка. Такой порядок их установки почему-то важен.
  22.  
  23.         eob(-1) print(len and t or t .. '\n') -- Если блок прошёл за концом строки, то вставить конец строки.
  24.  
  25.     end --                  Удалил выделенное, а если \n удалился — ставлю обратно. Печать.
  26.  
  27.     p[4] = p[2] + t:len() --        Ширина нового блока равна длине строки t. Если там не было табуляций и непечатного.
  28.  
  29.     stay() --[[!!! Вот тут вызов для возвращения фокуса, если № текущей строки не изменился, а экран "убежал"!!!]]
  30.  
  31.     B.set(p) E.Undo(1) --       Экран в исходное положение, блок восстановил.
  32.  
  33. end --  fill (t, w)
  1. local stayfocus
  2.  
  3. local function stay (freeze) -- Использовать: stay(0) запоминает № строки и её положение в окне, stay() восстанавливает, если № не изменился.
  4.  
  5. if freeze then stayfocus = { E.Pos(0, 1), E.Pos(0, 4) } return end
  6.  
  7. if not stayfocus then return end -- Чтобы не искать место, куда убежала строка, когда только клавишу поиска нажал, а поиск не нашёл.
  8.  
  9. if stayfocus[1] ~= E.Pos(0, 1) or stayfocus[2] == E.Pos(0, 4) then return end
  10.  
  11.     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
  12.  
  13. 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.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Макросы для редактора Журко

Post by John Doe »

Дмитрий Журко wrote: Wed 10 Feb, 2021 10:02 Автор приведённого вами учебника lua не считает, что arg для другого.
Тут необходимо уточнить одну важную вещь: редакция учебника, что доступна по ссылке, написана ещё для 5.0, поэтому некоторые моменты могут и отличаться. Но это в целом, а та статью, на которую я ссылался, вполне однозначна, и arg не упоминает. оказывается действительно упоминает.
Если же вам интересно разобраться именно с arg, то давайте ссылку, обсудим и это.
https://t.me/FarManager — Telegram чат
Дмитрий Журко
Posts: 81
Joined: Tue 19 Jan, 2021 21:49
Has thanked: 25 times
Been thanked: 1 time

Макросы для редактора Журко

Post by Дмитрий Журко »

John Doe wrote: Wed 10 Feb, 2021 10:30 Если же вам интересно разобраться именно с arg, то давайте ссылку, обсудим и это.
Теперь мне интересно эффективно сделать так, чтобы последователи не тратили время на это несоответствие учебнику. Возможность есть, она выглядит чуть иначе, но компьютер чуть не понимает. Мне надо подумать о наиболее действенном пути для этой цели.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

Макросы для редактора Журко

Post by Ann »

Дмитрий Журко,

Нашлось немного времени посмотреть обнародованные скрипты.

И мне они показались интересными и полезными. Особенно jr.typographic и jr.F4.Rus. Присмотрюсь к ним повнимательнее на практике и потом сделаю более основательные выводы.

Множество (около 30) ключей к макросам в jr.F4.Rus, каждый из которых желательно бы помнить, лично меня смутило. Поэтому я сделал следующее. В файле произвёл замену key = ' на key = 'F4’; key2 = ' и таким образом повесил весь набор этих макросов на один и тот же ключ. Т.е. воспользовался одним из замечательных свойств меню выбора макроса и вывел множество макросов в одно меню.

А т.к. я уже несколько лет с большой пользой применяю замечательно эффективный модуль , то у меня получилось весьма работоспособное меню.
jr.F4.RusMenu.png
Любой из представленных в этом меню макросов можно активировать либо примитивно установив курсор на строке с его названием и нажав Enter, либо нажав соответствующую цифру или букву, расположенную в строке макроса слева, или нажав соответствующий хоткей или шорткат, обозначенный в строке справа. Как кому привычнее и удобнее. А из своего опыта лично я убедился в том, что предпочтительнее пользоваться теми клавишами, которые обозначены в строке справа.

Можно ещё заметить, что это меню удобно использовать и не только по прямому назначению. А даже и просто как краткую справку по макросам, входящим в jr.F4.Rus. Просто нажав в редакторе F4.

И попутно имеется малюсенькое .
Дмитрий Журко
Posts: 81
Joined: Tue 19 Jan, 2021 21:49
Has thanked: 25 times
Been thanked: 1 time

Макросы для редактора Журко

Post by Дмитрий Журко »

Ann wrote: Fri 12 Feb, 2021 15:57 Нашлось немного времени посмотреть обнародованные скрипты.
Ну, с почином меня! Спасибо за то, что вы есть, за потраченное время и особенно за все замечания.
Ann wrote: Fri 12 Feb, 2021 15:57 каждый из которых желательно бы помнить, лично меня смутило.
Меня это тоже смущает. Я уже приделал вчера меню к typographic и ColorWord со справками. О том как делать меню узнал три дня назад. Сегодня пришлю сюда обновление. Намерен расширить свои задачи, а пока оттачиваю технологию взаимодействия с пользователем, который не обязан угадать мои мысли и писать мне не будет.
Ann wrote: Fri 12 Feb, 2021 15:57малюсенькое .
Спасибо. Пожалуйста, не надо беречь мою гордыню, фиг с ней давно. Если у вас есть ощущение неудобства, пожалуйста, опишите как угодно. Дело в том, что я был намерен сделать продукт и не уверен, что он уже готов. Сам использую чужие продукты, когда они "по душе", не всегда зная, как это описать. Тут субъективное очень важно.
К тому ещё, новый API FAR и lua я стал изучать лишь более месяца назад (странно, что надо так долго изучать среду макросов, но это о другом). Все советы использую.
Дмитрий Журко
Posts: 81
Joined: Tue 19 Jan, 2021 21:49
Has thanked: 25 times
Been thanked: 1 time

Макросы для редактора Журко

Post by Дмитрий Журко »

Ann wrote: Fri 12 Feb, 2021 15:57 Можно ещё заметить, что это меню удобно использовать и не только по прямому назначению. А даже и просто как краткую справку по макросам, входящим в jr.F4.Rus. Просто нажав в редакторе F4.
Пока не сделал, но идея очень нравится. Хочу сделать так, чтобы после не переделывать.

А вот почти всё предыдущее ревизовал, многое переписал. Сегодня выложил в первом сообщении темы. Буду очень рад любым замечаниям, даже непрожёванным.
Дмитрий Журко
Posts: 81
Joined: Tue 19 Jan, 2021 21:49
Has thanked: 25 times
Been thanked: 1 time

Макросы для редактора Журко

Post by Дмитрий Журко »

PS Прочёл, что написал в первом сообщении темы, и обнаружил ошибку: jr\annales.lua — function pad, последняя строка: не хватает минуса.
  1. return w < 0 and align('', s, -w, x) or align(s, '', w, x) end -- Если w положительно, то s слева, отрицательно — справа.
. Сейчас заменю публикацию. Пользуюсь я align, а pad, как мне казалось, ещё раз поясняет, что за align.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

Макросы для редактора Журко

Post by Ann »

Дмитрий Журко wrote: Tue 16 Feb, 2021 19:17обнаружил ошибку ... Сейчас заменю публикацию
Спасибо. Перекачал. Намерен смотреть, но по времени это будет с учётом ситуации с оперативной загрузкой по службе и c гораздо более приоритетным восхитительным SaveContext`ом.
Дмитрий Журко
Posts: 81
Joined: Tue 19 Jan, 2021 21:49
Has thanked: 25 times
Been thanked: 1 time

Макросы для редактора Журко

Post by Дмитрий Журко »

Ann wrote: Wed 17 Feb, 2021 02:55 Спасибо. Перекачал. Намерен смотреть, но по времени это будет с учётом ситуации с оперативной загрузкой по службе и c гораздо более приоритетным восхитительным SaveContext`ом.
Упс! Рано перекачали. Разбираюсь с новой для меня напастью: изменения в модулях (скажем, переименование функций) наслаиваются, а не обновляются. То есть, если я передумал называть функцию gap, она стала align, то gap останется в package.preload и будет работать. Но только у меня, который использовал gap, а у вас не будет! То есть я испытал все возможности, а они, как оказалось, работают отчасти в старой для меня среде. Решение я нашёл, но нынешний код не годится.

И спасибо за ответ. Я бы просто смолчал, а это неправильно. За рекомендацию тоже благодарю, хотя мне такая возможность, видимо, не нужна совсем. Но код почитаю. Потом, когда закончу повторное испытание своего.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Макросы для редактора Журко

Post by John Doe »

Есть подозрение что package.preload тут используется не по назначению.

(что само по себе не исключает и возможных ошибок в luamacro конечно)
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Макросы для редактора Журко

Post by Shmuel »

John Doe wrote: Wed 17 Feb, 2021 12:30 что само по себе не исключает и возможных ошибок в luamacro конечно
LuaMacro не использует package.preload (за исключением кода MoonScript, который вряд ли взаимодействует с кодом автора темы).
Дмитрий Журко
Posts: 81
Joined: Tue 19 Jan, 2021 21:49
Has thanked: 25 times
Been thanked: 1 time

Макросы для редактора Журко

Post by Дмитрий Журко »

John Doe wrote: Wed 17 Feb, 2021 12:30 (что само по себе не исключает и возможных ошибок в luamacro конечно)
Luamacro тут не причём. Это свойство языка, которое прежде не почувствовал, хотя и прочёл о нём в учебнике.

Код, который обновляет наслоения в глобальной среде исполнения макросов:

Code: Select all

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.
Дмитрий Журко
Posts: 81
Joined: Tue 19 Jan, 2021 21:49
Has thanked: 25 times
Been thanked: 1 time

Макросы для редактора Журко

Post by Дмитрий Журко »

Shmuel wrote: Wed 17 Feb, 2021 12:48 LuaMacro не использует package.preload (за исключением кода MoonScript, который вряд ли взаимодействует с кодом автора темы).
Отвечу я, Журко. Luamacro не работает с package.preload, с ней работает Lua, require. Переименование глобальной переменной, например, функции, порождает лишь ещё один её экземпляр в preload с новым именем. Просто об этом стоит помнить. Я даже читал, но сначала не понял, как именно это реализовано, что loaded и preload это просто таблицы. В учебнике не конкретно.
Дмитрий Журко
Posts: 81
Joined: Tue 19 Jan, 2021 21:49
Has thanked: 25 times
Been thanked: 1 time

Макросы для редактора Журко

Post by Дмитрий Журко »

И странно, что в lua far нет чего-то вроде far.Shell, например для far.Shell('far:config'). Или я не нашёл?
Last edited by Дмитрий Журко on Wed 17 Feb, 2021 14:05, edited 1 time in total.
Post Reply

Return to “Обсуждение макросов”