Panel.CtrlShiftPgUpDn.lua — хождение по папкам одного уровня

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

Panel.CtrlShiftPgUpDn.lua — хождение по папкам одного уровня

Post by John Doe » Mon 23 Jun, 2014 09:00

Обсуждаем штатный макрос Panel.CtrlShiftPgUpDn.lua

Связанные темы:

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

Re: Улучшение макросов из поставки фара

Post by zg » Mon 23 Jun, 2014 11:22

John Doe wrote:
Прежде всего непонятна строка 4. Очевидно что для корня макрос не имеет смысла, но почему тогда в этом месте не завершить макрос?

А в строке 7 (на мой взгляд) в условии необходимо учесть возможность того, что курсор на ".."
что значит не имеет смысла? там меню дисков показывается.

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

Re: Улучшение макросов из поставки фара

Post by John Doe » Mon 23 Jun, 2014 11:25

if not APanel.Root then Keys('CtrlPgUp') end
Не показывается, для этого и условие.
Вопрос в том, почему там нет else return

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

Re: Улучшение макросов из поставки фара

Post by zg » Mon 23 Jun, 2014 11:31

John Doe wrote:Вопрос в том, почему там нет else return
потому что кто-то давным давно написал этот макрос, как мог со всеми тогдашними ограничениями, а потом его тупо в лоб адаптировали ко всем новым веяниям.

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

Re: Улучшение макросов из поставки фара

Post by John Doe » Mon 23 Jun, 2014 11:51

Это макрос из сборки Macros For Zeroes & Ones v294a, в нём изначально уже присутствуют все эти вложенные условия.
Возможно просто недочёт, а может быть так и задумано автором.

Тут есть и другой спорный момент: если текущая папка последняя на панели, то по CtrlShiftPgDn перейдём в родительскую папку.
Как по мне, то лучше в таких случаях возвращаться в исходную папку.

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

Re: Улучшение макросов из поставки фара

Post by John Doe » Mon 23 Jun, 2014 13:28

Вот мой вариант:
  1. Macro {
  2.   description="Jump to the previous folder on the same level";
  3.   area="Shell"; key="CtrlShiftPgUp";
  4.   condition=function() return not APanel.Root end;
  5.   action=function()
  6.     local i = APanel.CurPos
  7.     Keys"CtrlPgUp"
  8.     if not APanel.Bof then
  9.       Keys"Up"
  10.       if APanel.Folder and (not APanel.Bof or APanel.Current~="..") then
  11.         Keys"CtrlPgDn"
  12.         return
  13.       end
  14.       Keys"Down"
  15.     end
  16.     Keys"CtrlPgDn"
  17.     Panel.SetPosIdx(0,i)
  18.     mf.beep()
  19.   end;
  20. }
  21.  
  22. Macro {
  23.   description="Jump to the next folder on the same level";
  24.   area="Shell"; key="CtrlShiftPgDn";
  25.   condition=function() return not APanel.Root end;
  26.   action=function()
  27.     local i = APanel.CurPos
  28.     Keys"CtrlPgUp"
  29.     if not APanel.Eof then
  30.       Keys"Down"
  31.       if APanel.Folder then
  32.         Keys"CtrlPgDn"
  33.         return
  34.       end
  35.       Keys"Up"
  36.     end
  37.     Keys"CtrlPgDn"
  38.     Panel.SetPosIdx(0,i)
  39.     mf.beep()
  40.   end;
  41. }
В отличии от оригинала, переходит только по папкам одного уровня, и ни при каких условиях не выскакивает в родительскую папку.

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

Re: Улучшение макросов из поставки фара

Post by zg » Mon 23 Jun, 2014 13:47

John Doe wrote:Вот мой вариант:
копипаста — плохо.

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

Re: Улучшение макросов из поставки фара

Post by John Doe » Mon 23 Jun, 2014 14:04

Я поначалу пытался отовсюду исключить копипасту, но не всем понравилось.
  1. local ACTIVE = 0
  2. Macro {
  3.   description="Jump to the previous folder on the same level";
  4.   area="Shell"; key="CtrlShiftPgUp CtrlShiftPgDn CtrlShiftNum9 CtrlShiftNum3";
  5.   condition=function() return not APanel.Root end;
  6.   action=function()
  7.     local up = akey(1)=="CtrlShiftPgUp" or akey(1)=="CtrlShiftNum9"
  8.     local source_path,source_pos = APanel.Path,APanel.CurPos
  9.     Keys"CtrlPgUp"
  10.     if not APanel[up and "Bof" or "Eof"] then
  11.       Keys(up and "Up" or "Down")
  12.       if APanel.Folder and (not up or not APanel.Bof or APanel.Current~="..") then
  13.         --Panel.SetPath(ACTIVE,APanel.Current)
  14.         Keys"CtrlPgDn"
  15.         return
  16.       end
  17.       Keys(up and "Down" or "Up")
  18.     end
  19.     Keys"CtrlPgDn"
  20.     Panel.SetPosIdx(ACTIVE,source_pos)
  21.     mf.beep()
  22.   end;
  23. }
Update
Почему-то всё мелькает, как будто не работает DisableOutput. Объяснить не могу.

Update 2
Закомментировал --Panel.SetPath(ACTIVE,APanel.Current), заменил на Keys"CtrlPgDn".
Всё нормализовалось. Объяснить по-прежнему не могу.

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

Re: Panel.CtrlShiftPgUpDn.lua — хождение по папкам одного ур

Post by John Doe » Mon 23 Jun, 2014 20:29

Избавился от использования Keys:

Перевёл на луафар-апи:

Какой из 3х вариантов лучше в качестве штатного макроса?

Post Reply

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