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

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

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

Post by John Doe »

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

Связанные темы:
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

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

А в строке 7 (на мой взгляд) в условии необходимо учесть возможность того, что курсор на ".."
что значит не имеет смысла? там меню дисков показывается.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

if not APanel.Root then Keys('CtrlPgUp') end
Не показывается, для этого и условие.
Вопрос в том, почему там нет else return
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

John Doe wrote:Вопрос в том, почему там нет else return
потому что кто-то давным давно написал этот макрос, как мог со всеми тогдашними ограничениями, а потом его тупо в лоб адаптировали ко всем новым веяниям.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

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

Тут есть и другой спорный момент: если текущая папка последняя на панели, то по CtrlShiftPgDn перейдём в родительскую папку.
Как по мне, то лучше в таких случаях возвращаться в исходную папку.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Вот мой вариант:
  1. Macro {
  2.  
  3.   description="Jump to the previous folder on the same level";
  4.  
  5.   area="Shell"; key="CtrlShiftPgUp";
  6.  
  7.   condition=function() return not APanel.Root end;
  8.  
  9.   action=function()
  10.  
  11.     local i = APanel.CurPos
  12.  
  13.     Keys"CtrlPgUp"
  14.  
  15.     if not APanel.Bof then
  16.  
  17.       Keys"Up"
  18.  
  19.       if APanel.Folder and (not APanel.Bof or APanel.Current~="..") then
  20.  
  21.         Keys"CtrlPgDn"
  22.  
  23.         return
  24.  
  25.       end
  26.  
  27.       Keys"Down"
  28.  
  29.     end
  30.  
  31.     Keys"CtrlPgDn"
  32.  
  33.     Panel.SetPosIdx(0,i)
  34.  
  35.     mf.beep()
  36.  
  37.   end;
  38.  
  39. }
  40.  
  41.  
  42.  
  43. Macro {
  44.  
  45.   description="Jump to the next folder on the same level";
  46.  
  47.   area="Shell"; key="CtrlShiftPgDn";
  48.  
  49.   condition=function() return not APanel.Root end;
  50.  
  51.   action=function()
  52.  
  53.     local i = APanel.CurPos
  54.  
  55.     Keys"CtrlPgUp"
  56.  
  57.     if not APanel.Eof then
  58.  
  59.       Keys"Down"
  60.  
  61.       if APanel.Folder then
  62.  
  63.         Keys"CtrlPgDn"
  64.  
  65.         return
  66.  
  67.       end
  68.  
  69.       Keys"Up"
  70.  
  71.     end
  72.  
  73.     Keys"CtrlPgDn"
  74.  
  75.     Panel.SetPosIdx(0,i)
  76.  
  77.     mf.beep()
  78.  
  79.   end;
  80.  
  81. }
В отличии от оригинала, переходит только по папкам одного уровня, и ни при каких условиях не выскакивает в родительскую папку.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

John Doe wrote:Вот мой вариант:
копипаста — плохо.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

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

Update 2
Закомментировал --Panel.SetPath(ACTIVE,APanel.Current), заменил на Keys"CtrlPgDn".
Всё нормализовалось. Объяснить по-прежнему не могу.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

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

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

Какой из 3х вариантов лучше в качестве штатного макроса?
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

John Doe,
Думаю оба варианта хороши
API в принципе думаю что правильнее,
а с клавишами зато типа доступнее
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

citRiks wrote: Sat 01 Feb, 2020 23:20 Думаю оба варианта хороши
Варианта 3: имитация нажатий с помощью Keys, использование макро апи, и использование апи плагинов.
Любой из них лучше чем то что сейчас в Addons/Macros.
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

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

Post by Shmuel »

John Doe wrote: Tue 04 Feb, 2020 10:22 Любой из них лучше чем то что сейчас в Addons/Macros.
Выберите один на ваше усмотрение, закоммичу.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

Shmuel,
Голосую за использование АПИ в этих и всех скриптах.
Эмулирование нажатий клавиш не люблю по ряду причин,
из них первая это то что в большинстве случае получается "безумный робот".
А записью макросов юзеры и сами смогут налепить себе цепочку нажатий.

John Doe,
Извиняюсь если чего пропустил, каких плагинов, штатных или внешататных?
Или сам плагин МакроЛуа имеется ввиду?
Если для массового пользователя, то для примеров плагины только штатные, и то под вопросом.
Ну кроме Луа-плагина.
Как говорил великий Ленин, "из всех видов искусств, для нас важнейшим является кино плагин Луа"
При всей змаечательности многих и многих плагинов, пока они не штатные,
и\или не имеют большой и качественной базы документации,
ценности для массового пользователя они увы, не представляют.
извиняюсь за многословие, я попробовал обьянить предпочтения в контексте массового пользователя для которых и предполагаются примеры
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

citRiks,
John Doe wrote: Tue 04 Feb, 2020 10:22 имитация нажатий с помощью Keys, использование макро апи, и использование апи плагинов.
John Doe wrote: Mon 16 Jul, 2012 13:44 Таким образом, в макросах сейчас доступны:
  • Стандартные функции и библиотеки Lua.
  • В фаре используется LuaJIT (обсуждение), что (в частности) даёт доступ к библиотеке FFI (обсуждение).
  • "Надстройка" над Lua: MoonScript (Подробности и обсуждение)
  • Функции API плагинов, посредством библиотеки LuaFAR (см. luafar_manual.chm)
  • Функции старого макроязыка (API макросов) (Обновление)
    Актуальный мануал, отражающий после перехода на Lua: macroapi_manual.ru.chm.
    (Мануал весьма лаконичен, вместо описания функции старого макроязыка приведены ссылки на устаревший раздел )
Post Reply

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