Page 3 of 4

Re: BlockIndent — Смещение блока

Posted: Fri 14 Mar, 2014 05:16
by Aidar

Latest post of the previous page:

01ssv wrote:Здравствуйте, подскажите как устанавливать плагин? Создал папку BlockIndent в папке Plugins поместил в нее файл BlockIndent.lua, но плагин не подхватывается, в списке плагинов в редакторе не вижу его.
Это не плагин, а макрос, заменяющий плагин.

Re: BlockIndent — Смещение блока

Posted: Fri 14 Mar, 2014 05:53
by 01ssv
Aidar wrote:Это не плагин, а макрос, заменяющий плагин.
В документации вижу описание импорта макросов из файлов *.farconfig, а здесь мне как нужно импортировать? Возможно, где то есть готовое описание?

Re: BlockIndent — Смещение блока

Posted: Fri 14 Mar, 2014 07:35
by Aidar
01ssv wrote:В документации вижу описание импорта макросов из файлов *.farconfig, а здесь мне как нужно импортировать? Возможно, где то есть готовое описание?
Скопировать файл, приведённый по ссылке, в каталог %FarProfile%\Macros\scripts или любой его подкаталог.

Re: BlockIndent — Смещение блока

Posted: Fri 14 Mar, 2014 08:26
by 01ssv
С макросами разобрался благодаря теме, http://forum.farmanager.com/viewtopic.php?f=57&t=8010
Спасибо за наводку, однако, теперь ошибку выдает уже макрос:

Code: Select all

...\Far3\Profile\Macros\scripts\BlockIndent.lua:32: '=' expected near 'local' 

Re: BlockIndent — Смещение блока

Posted: Fri 14 Mar, 2014 09:01
by 01ssv
Теперь взял именно файл по ссылке и все заработало вроде как. Странно, конечно, что shift+tab сдвигает вправо

Re: BlockIndent — Смещение блока

Posted: Fri 14 Mar, 2014 09:25
by 01ssv
Переназначил сдвиг вправо на Tab сдвиг влево на ShiftTab (shiftBS у меня завешивал весь фар). Теперь проблема такая: если выделение занимает последнюю строку не целиком, а частично, то при нажатии Tab последняя строка удаляется

BlockIndent — Смещение блока

Posted: Thu 06 Nov, 2014 03:06
by indakote
Есть баги:
Пишем 2 строки
ОСЬУЩЦ
счоцутьщку

Ставим курсор в конец строки, жмём CtrlShiftHome - выделили

Жмём Shift+Tab и одна строчка пропадает.

То же самое если выделить с начала а не конца строки но идентировать назад


По пробелу тоже не идентирует.

BlockIndent — Смещение блока

Posted: Thu 06 Nov, 2014 08:43
by Shmuel
1. Приложен патч.
2. Чтобы делал отступы с пробелами, нужно в двух последних макросах заменить NoMacro на Macro.
patch.1.7z
(364 Bytes) Downloaded 174 times

BlockIndent — Смещение блока

Posted: Thu 06 Nov, 2014 09:26
by siberia-man
Есть еще один серьезный баг, на который натыкался пару раз. Если последняя непустая строка файла не содержит перевода строк и выделена, то сдвиг влево/вправо вешает FAR. Если запущен из под ConEmu, то последний не может рестартовать FAR командой Recreate active console. Если последнюю строку не выделять - работает. Task Manager показывает статус Running. Видимо при обработке таких строк где-то происходит зацикливание.

BlockIndent — Смещение блока

Posted: Thu 06 Nov, 2014 09:56
by Shmuel
Кумулятивный патч на оба бага (применять к оригинальному файлу).
patch.2.7z
(573 Bytes) Downloaded 200 times

BlockIndent — Смещение блока

Posted: Thu 06 Nov, 2014 10:19
by siberia-man
О! Оперативно Вы. А я хотел свой вариант запостить.

Code: Select all

		line = line + 1
+		loop = ei.TotalLines >= line
	until not loop
При просмотре кода скрипта смутило, что в цикле until not loop нет кода, изменяющего переменную loop.

BlockIndent — Смещение блока

Posted: Thu 06 Nov, 2014 10:26
by Shmuel
siberia-man wrote: При просмотре кода скрипта смутило, что в цикле until not loop нет кода, изменяющего переменную loop.
Переменная loop - это не счётчик. Если нет блока, сдвигается только текущая строка, в этом случае loop==false.
А код, изменяющий эту переменную внутри цикла - есть, посмотрите внимательней. Есть break.

BlockIndent — Смещение блока

Posted: Thu 06 Nov, 2014 11:03
by siberia-man
Я не утверждал, что это счетчик. Это скорее флаговая переменная.
В цикле есть две проверки loop, но нет кода присваивания другого значения.

Code: Select all

wget -qO - http://evil-programmers.googlecode.com/svn/trunk/BlockIndent/BlockIndent.lua | grep -i -e repeat -e until -e loop
        local loop = false
                        loop = true;
        repeat
                if not s or (loop and ((s.SelStart == 0) or (s.SelEnd ~= -1 and s.SelStart > s.SelEnd))) then
        until not loop

BlockIndent — Смещение блока

Posted: Thu 06 Nov, 2014 11:06
by Shmuel
siberia-man wrote: В цикле есть две проверки loop, но нет кода присваивания другого значения.
Потому что по логике скрипта оно не нужно.

BlockIndent — Смещение блока

Posted: Tue 27 Oct, 2015 09:47
by siberia-man
С последней версией FAR 3 beta 4444 стала появляться ошибка

Code: Select all

                                                                         
   г=========================== LuaMacro ============================¬   
   ¦ C:\PROGS\etc\Far3\Profile\Macros\scripts\Editor.BlockIndent.lua ¦   
   ¦ Invalid macro flag: DisableOutput                               ¦   
   ¦-----------------------------------------------------------------¦   
   ¦                         { OK } [ Edit ]                         ¦   
   L=================================================================-   
                                                                         
Судя по документации флаг DisableOutput был удален в билде 3209, но, например, билд 4400 этот флаг ошибкой не считал (игнорировал с 3436). Видимо 4444 стал более строг и стал сообщать о неверных флагах.

Решается удалением все строк flags = "DisableOutput";.

BlockIndent — Смещение блока

Posted: Tue 27 Oct, 2015 09:53
by Shmuel
siberia-man, отсюда и ниже смотрите обсуждение.