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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 12457
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 188 times

Re: Panel.JumpToSelectedFile.lua

Post by John Doe » Sat 23 Mar, 2013 16:00

Latest post of the previous page:

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

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

Re: Panel.JumpToSelectedFile.lua

Post by Smitis » Sat 23 Mar, 2013 16:04

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

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

Re: Panel.JumpToSelectedFile.lua

Post by John Doe » Sat 23 Mar, 2013 16:39

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

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

Re: Panel.JumpToSelectedFile.lua

Post by John Doe » Sun 24 Mar, 2013 01:18

Хотя всё-таки вариант, где за все 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: 1593
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 18 times
Been thanked: 35 times

Re: Panel.JumpToSelectedFile.lua

Post by Smitis » Sun 24 Mar, 2013 11:05

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

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 “Обсуждение макросов”