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

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
Aidar
Posts: 533
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 6 times
Contact:

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

Post by Aidar » Fri 14 Mar, 2014 05:16

Latest post of the previous page:

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

01ssv
Posts: 50
Joined: Fri 29 May, 2009 04:01
Location: Барнаул

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

Post by 01ssv » Fri 14 Mar, 2014 05:53

Aidar wrote:Это не плагин, а макрос, заменяющий плагин.
В документации вижу описание импорта макросов из файлов *.farconfig, а здесь мне как нужно импортировать? Возможно, где то есть готовое описание?

User avatar
Aidar
Posts: 533
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 6 times
Contact:

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

Post by Aidar » Fri 14 Mar, 2014 07:35

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

01ssv
Posts: 50
Joined: Fri 29 May, 2009 04:01
Location: Барнаул

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

Post by 01ssv » Fri 14 Mar, 2014 08:26

С макросами разобрался благодаря теме, viewtopic.php?f=57&t=8010
Спасибо за наводку, однако, теперь ошибку выдает уже макрос:

Code: Select all

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

01ssv
Posts: 50
Joined: Fri 29 May, 2009 04:01
Location: Барнаул

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

Post by 01ssv » Fri 14 Mar, 2014 09:01

Теперь взял именно файл по ссылке и все заработало вроде как. Странно, конечно, что shift+tab сдвигает вправо

01ssv
Posts: 50
Joined: Fri 29 May, 2009 04:01
Location: Барнаул

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

Post by 01ssv » Fri 14 Mar, 2014 09:25

Переназначил сдвиг вправо на Tab сдвиг влево на ShiftTab (shiftBS у меня завешивал весь фар). Теперь проблема такая: если выделение занимает последнюю строку не целиком, а частично, то при нажатии Tab последняя строка удаляется
Attachments
bi.jpg
bi.jpg (3.93 KiB) Viewed 4273 times

indakote
Posts: 48
Joined: Mon 13 Oct, 2014 09:29

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

Post by indakote » Thu 06 Nov, 2014 03:06

Есть баги:
Пишем 2 строки
ОСЬУЩЦ
счоцутьщку

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

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

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


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

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Thu 06 Nov, 2014 08:43

1. Приложен патч.
2. Чтобы делал отступы с пробелами, нужно в двух последних макросах заменить NoMacro на Macro.
patch.1.7z
(364 Bytes) Downloaded 39 times

siberia-man
Posts: 69
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

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

Post by siberia-man » Thu 06 Nov, 2014 09:26

Есть еще один серьезный баг, на который натыкался пару раз. Если последняя непустая строка файла не содержит перевода строк и выделена, то сдвиг влево/вправо вешает FAR. Если запущен из под ConEmu, то последний не может рестартовать FAR командой Recreate active console. Если последнюю строку не выделять - работает. Task Manager показывает статус Running. Видимо при обработке таких строк где-то происходит зацикливание.

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Thu 06 Nov, 2014 09:56

Кумулятивный патч на оба бага (применять к оригинальному файлу).
patch.2.7z
(573 Bytes) Downloaded 62 times

siberia-man
Posts: 69
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

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

Post by siberia-man » Thu 06 Nov, 2014 10:19

О! Оперативно Вы. А я хотел свой вариант запостить.

Code: Select all

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

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Thu 06 Nov, 2014 10:26

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

siberia-man
Posts: 69
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

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

Post by siberia-man » Thu 06 Nov, 2014 11:03

Я не утверждал, что это счетчик. Это скорее флаговая переменная.
В цикле есть две проверки 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

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Thu 06 Nov, 2014 11:06

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

siberia-man
Posts: 69
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

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

Post by siberia-man » Tue 27 Oct, 2015 09:47

С последней версией 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";.

Shmuel
Posts: 5166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 145 times

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

Post by Shmuel » Tue 27 Oct, 2015 09:53

siberia-man, отсюда и ниже смотрите обсуждение.

Post Reply

Return to “Полезные макросы и скрипты”