trucer — удаление пробелов с концов строк

Здесь обсуждается всё, что касается макросов.
User avatar
raven428
Posts: 44
Joined: Sat 28 Mar, 2009 11:17
Has thanked: 9 times
Been thanked: 1 time

trucer — удаление пробелов с концов строк

Post by raven428 » Sun 11 Sep, 2016 20:39

переписал свой плагин на lua, ибо не нашёл на форуме ничего с такой же функциональностью и без зависимостей. плагин, в общем-то, по-прежнему вполне рабочий, но корёжит юникод. устанавливать как обычно - в %FARPROFILE%\Macros\scripts. с конфигурацией, в отличии от плагина, не заморачивался - всё в начале файла. функциональность такая же как у плагина (почти что копипастил), разве что концы строк не меняет.

конструктивная критика приветствуется. только прошу учесть, что на lua я сегодня программировал первый раз, если не считать конвертацию макросов в формат far3.

ссылка
too much raVen over paradise...

User avatar
zg
zero-gravity
Posts: 5231
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

trucer - замена одноимённого плагина

Post by zg » Sun 11 Sep, 2016 21:07

а потом кто-то сделает ECTL_SAVEFILE неактивному файлу. а активным будет какой-нибудь *.exe.

User avatar
raven428
Posts: 44
Joined: Sat 28 Mar, 2009 11:17
Has thanked: 9 times
Been thanked: 1 time

trucer - замена одноимённого плагина

Post by raven428 » Sun 11 Sep, 2016 21:20

это намёк на то, что Get/SetString надо вызывать с первым параметром, отличным от nil или про что-то другое? если да, то как тогда правильно получить EditorID активного редактора или проверить активен ли редактор во время события сохранения?
too much raVen over paradise...

Shmuel
Posts: 5041
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

trucer - замена одноимённого плагина

Post by Shmuel » Sun 11 Sep, 2016 21:34

1. В ф-ции action() обработчика (строка 49) первый параметр - eid - для которого редактора вызван обработчик.
2. На строке 59 editor.GetInfo() вызван без параметров, т.е. для текущего редактора.
Можно сравнить eid и sav_info.EditorID.

User avatar
zg
zero-gravity
Posts: 5231
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

trucer - замена одноимённого плагина

Post by zg » Sun 11 Sep, 2016 21:34

в событие приходит eid.

User avatar
raven428
Posts: 44
Joined: Sat 28 Mar, 2009 11:17
Has thanked: 9 times
Been thanked: 1 time

trucer - замена одноимённого плагина

Post by raven428 » Sun 11 Sep, 2016 21:44

вставил везде в обработчике события eid вместо nil, файл обновил в первом посте. так правильно или ещё где-то могут быть проблемы?
too much raVen over paradise...

Shmuel
Posts: 5041
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

trucer - замена одноимённого плагина

Post by Shmuel » Sun 11 Sep, 2016 22:03

Проблем вроде не вижу, единственно может немного странно будет (гипотетически) при сохранении неактивного редактора в активном появится индикация процентов.

Shmuel
Posts: 5041
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

trucer - замена одноимённого плагина

Post by Shmuel » Sun 11 Sep, 2016 22:11

А, есть всё же проблемка: Editor.Lines. Нужно использовать sav_info.TotalLines.

User avatar
raven428
Posts: 44
Joined: Sat 28 Mar, 2009 11:17
Has thanked: 9 times
Been thanked: 1 time

trucer - замена одноимённого плагина

Post by raven428 » Sun 11 Sep, 2016 22:19

спасибо! поправил, перезалил.
too much raVen over paradise...

User avatar
John Doe
Бюрократ
Posts: 11078
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

trucer - замена одноимённого плагина

Post by John Doe » Sun 11 Sep, 2016 22:26

editor.DeleteString()
Тут тоже бы eid.

Есть ещё ряд второстепенных замечаний, если интересны конечно.

И по оформлению первого поста: было бы неплохо описать всю функциональность скрипта, не вынуждая пользователей идти за описанием на плагринг

User avatar
raven428
Posts: 44
Joined: Sat 28 Mar, 2009 11:17
Has thanked: 9 times
Been thanked: 1 time

trucer - замена одноимённого плагина

Post by raven428 » Sun 11 Sep, 2016 22:36

спасибо, поправил, перезалил. второстепенные замечания, конечно же, интересны. оформлением поста займусь позже.
too much raVen over paradise...

User avatar
John Doe
Бюрократ
Posts: 11078
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

trucer - замена одноимённого плагина

Post by John Doe » Sun 11 Sep, 2016 22:56

raven428 wrote: второстепенные замечания
По lua
Крайне желательно объявлять переменные с ключевым словом local
Внешние скобки в if()then end не обязательны (впрочем и не мешают, дело вкуса)

По макросам
flags = ''; указывать нет нужды
mf.waitkey(1, 0) - наверно ошибка. Второй параметр можно опустить, а первый у вас 1 миллисекунда (или так задумано?)

По апи
Нежелательно использовать те функции макро апи, для которых есть соответствия в апи плагинов.
msgbox, mf.trim

По мелочи
os.time(); - в апи есть более точные часы
far.Flags.EE_READ - удобнее объявить ранее local F = far.Flags, после чего использовать F.EE_READ
far.SaveScreen(0, 0, -1, -1) - если все параметры опустить, то получим тот же эффект.
Возможно вместо сохранения/восстановления экрана стоит его просто обновить.

User avatar
raven428
Posts: 44
Joined: Sat 28 Mar, 2009 11:17
Has thanked: 9 times
Been thanked: 1 time

trucer - замена одноимённого плагина

Post by raven428 » Mon 12 Sep, 2016 05:14

John Doe wrote:mf.waitkey(1, 0) - наверно ошибка. Второй параметр можно опустить, а первый у вас 1 миллисекунда (или так задумано?)
обработка файла в два миллиона строк занимает несколько секунд и пользователь может захотеть прервать выполнение. я ловлю клавишу Esc этой конструкцией. вызывая waitkey с задержкой 1 миллисекунда нажатие отлично ловится, очевидно, через буфер. если для этого есть более красивое решение, то буду благодарен, если подскажете.
John Doe wrote:Нежелательно использовать те функции макро апи, для которых есть соответствия в апи плагинов.
msgbox, mf.trim
подскажите, пожалуйста, аналоги. в FarEncyclopedia.ru.chm нашёл только Trim, но у него нет параметров кроме обрабатываемой строки. функциональность плагина подразумевает отрезание пробелов только с правой стороны строки.
John Doe wrote:os.time(); - в апи есть более точные часы
тоже не нашёл. подскажете?
John Doe wrote:far.SaveScreen(0, 0, -1, -1) - если все параметры опустить, то получим тот же эффект.
Возможно вместо сохранения/восстановления экрана стоит его просто обновить.
через far.Text() или правильней каким-то другим образом?
too much raVen over paradise...

Shmuel
Posts: 5041
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

trucer - замена одноимённого плагина

Post by Shmuel » Mon 12 Sep, 2016 06:05

editor.DeleteString() - как уже сказали вчера - отсутствует аргумент eid.

User avatar
John Doe
Бюрократ
Posts: 11078
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

trucer - замена одноимённого плагина

Post by John Doe » Mon 12 Sep, 2016 07:25

raven428 wrote: обработка файла в два миллиона строк занимает несколько секунд
Интересно сравнить скорость выполнения плагина и скрипта на таком файле. В любом случае простор для оптимизации есть.
raven428 wrote: с задержкой 1 миллисекунда
Да, всё нормально, это я вчера не вник.
raven428 wrote: в FarEncyclopedia.ru.chm нашёл только Trim
Его и имел ввиду, и да он действительно не подходит.
Но всё равно mf.trim тут не нужен, хотя бы потому что стандартный string.match работает ощутимо быстрее.
raven428 wrote: os.time();
far.FarClock

User avatar
John Doe
Бюрократ
Posts: 11078
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

trucer - замена одноимённого плагина

Post by John Doe » Mon 12 Sep, 2016 07:43

Для информации.
Скрипты аналогичного назначения имеются в пакетах SimSU и Rh_Scripts
(Ни в одном из них не предусмотрен запуск при сохранении)

Post Reply

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

Who is online

Users browsing this forum: No registered users and 2 guests