Panel.JumpToSelectedFile.lua — прыжки по выделенным файлам

Здесь обсуждается всё, что касается макросов.
Smitis
Posts: 1621
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 18 times
Been thanked: 40 times

Re: Panel.JumpToSelectedFile.lua

Post by Smitis »

Latest post of the previous page:

Под переусложнением я имею ввиду, то, твоя функция (можно я без выканья?) делает home и end в цикле, хотя для них цикл не нужен. Пусть даже цикл выполнит всего одну итерацию. Отсюда и усложнения с иницилизацией параметров.
Куча вызовов функций, некоторые из которых вложенные, а некоторые имеют по 4 параметра, и без Писания вряд ли возможно сходу понять их назначение.
Ну да, на plugin api всё было прозрачно и понятно ;)
И рекурсивный вызов это здорово. И излишний параметр scope ;)
Разум когда-нибудь победит.

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

Re: Panel.JumpToSelectedFile.lua

Post by John Doe »

Smitis wrote:функция ... делает home и end в цикле, хотя для них цикл не нужен.
Что значит "не нужен"? Без цикла никак.
В вашем случае его скрывает одна функция, в моём другая.
Smitis wrote:Ну да, на plugin api всё было прозрачно и понятно
Вообще-то да :-)
Но были и недостатки:
1. Лишний громоздкий кусок кода
2. Избыточное число параметров (4), и, поскольку значения инициализировались в каждом из 4х макросов отдельно - дублирование части кода в 4х местах.

P.S.
Мой вариант макроса в этом плане лучше, плюс добавлена возможность убрать цикличность.
Рекурсии там кстати возникнуть не может, максимум 1 вложенный вызов.

Smitis
Posts: 1621
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 18 times
Been thanked: 40 times

Re: Panel.JumpToSelectedFile.lua

Post by Smitis »

Ладно, идейные споры до добра не доведут.
Но выложу свой вариант (на macro api), может кому-то пригодится.
Разум когда-нибудь победит.

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

Re: Panel.JumpToSelectedFile.lua

Post by John Doe »

Всё что после if not selected_cycle then return end можно заменить на вызов Home/End

Smitis
Posts: 1621
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 18 times
Been thanked: 40 times

Re: Panel.JumpToSelectedFile.lua

Post by Smitis »

John Doe wrote:Всё что после if not selected_cycle then return end можно заменить на вызов Home/End
Да! Сейчас поправлю (у меня циклического перебора вообще не было, поторопился добавить :oops: )
Разум когда-нибудь победит.

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

Re: Panel.JumpToSelectedFile.lua

Post by John Doe »

Другое дело.
Теперь я сам буду выступать за то, чтобы заменить штатный вариант вашим.
За лаконичность.

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

Re: Panel.JumpToSelectedFile.lua

Post by John Doe »

Хотя всё-таки вариант, где за все 4 действия отвечает одна функция, мне кажется более концептуальным.
Вот, разгрузил функцию, вынес наружу инициализацию параметров, теперь она принимает (from,to)
  1. local cyclic = true -- set false to disable cyclic jump
  2. local is_selected = 8
  3. local function JumpToSelected (from, to)
  4.   for pos=from,to,from<to and 1 or -1 do
  5.     if Panel.Item(0,pos,is_selected) then return Panel.SetPosIdx(0,pos) end
  6.   end            
  7.   if cyclic then JumpToSelected(APanel.ItemCount-to,to) end
  8. end
  9.  
  10. Macro {description="Jump to the next selected file";
  11.   area="Shell Search"; key="CtrlShiftDown"; flags="Selection"; 
  12.   action = function() JumpToSelected(APanel.CurPos+1,APanel.ItemCount) end;
  13. }
  14.  
  15. Macro {description="Jump to the previous selected file";
  16.   area="Shell Search"; key="CtrlShiftUp"; flags="Selection"; 
  17.   action = function() JumpToSelected(APanel.CurPos-1,1) end;
  18. }
  19.  
  20. Macro {description="Jump to the first selected file"; 
  21.   area="Shell Search"; key="CtrlShiftHome CtrlShiftNum7"; flags="Selection";
  22.   action = function() JumpToSelected(1,APanel.ItemCount) end;
  23. }
  24.  
  25. Macro {description="Jump to the last selected file"; 
  26.   area="Shell Search"; key="CtrlShiftEnd CtrlShiftNum1"; flags="Selection"; 
  27.   action = function() JumpToSelected(APanel.ItemCount,1) end;
  28. }
Получилось так же лаконично.

Smitis
Posts: 1621
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 18 times
Been thanked: 40 times

Re: Panel.JumpToSelectedFile.lua

Post by Smitis »

Попробовал с отметкой текущего файла. Если без цикличности, тоже лаконичный вариант.

Code: Select all

local function selected_jump3( dir )
	local current = Panel.SetPosIdx(0,0)
	local nosel = not Panel.Item(0,0,8)
	if nosel then Panel.Select(0,1,1) end
	Panel.SetPosIdx(0,Panel.SetPosIdx(0,0,1)+dir,1)
	if nosel then Panel.Select(0,0,1,current) end
	if selected_cycle and Panel.SetPosIdx(0,0)==current then -- если не переместились, зацикливаем
		Panel.SetPosIdx(0,(dir>0 and 1 or APanel.SelCount),1)
	end
end
С цикличностью менее красиво будет, из-за дополнительных проверок. И что-то лень делать :)
Добавил цикличность
Разум когда-нибудь победит.

Post Reply

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