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

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

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

Post by John Doe »

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

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

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

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

Post by zg »

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

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

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

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

Post by John Doe »

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

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

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

Post by zg »

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

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

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

Post by John Doe »

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

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

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

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

Post by John Doe »

Вот мой вариант:
  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: 5841
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 152 times
Contact:

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

Post by zg »

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

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

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

Post by John Doe »

Я поначалу пытался отовсюду исключить копипасту, но не всем понравилось.
  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: 12836
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

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

Post by John Doe »

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

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

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

citRiks
Posts: 702
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 210 times
Been thanked: 44 times

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

Post by citRiks »

John Doe,
Думаю оба варианта хороши
API в принципе думаю что правильнее,
а с клавишами зато типа доступнее
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

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

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: 6147
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 318 times

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

Post by Shmuel »

John Doe wrote:
Tue 04 Feb, 2020 10:22
Любой из них лучше чем то что сейчас в Addons/Macros.
Выберите один на ваше усмотрение, закоммичу.

citRiks
Posts: 702
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 210 times
Been thanked: 44 times

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

Post by citRiks »

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

John Doe,
Извиняюсь если чего пропустил, каких плагинов, штатных или внешататных?
Или сам плагин МакроЛуа имеется ввиду?
Если для массового пользователя, то для примеров плагины только штатные, и то под вопросом.
Ну кроме Луа-плагина.
Как говорил великий Ленин, "из всех видов искусств, для нас важнейшим является кино плагин Луа"
При всей змаечательности многих и многих плагинов, пока они не штатные,
и\или не имеют большой и качественной базы документации,
ценности для массового пользователя они увы, не представляют.
извиняюсь за многословие, я попробовал обьянить предпочтения в контексте массового пользователя для которых и предполагаются примеры
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

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

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