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

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

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

Post by John Doe » Fri 30 May, 2014 12:49

Latest post of the previous page:

Addons\Macros\F3.lua
  1. Macro { description="Use internal editor as viewer";
  2.   area="Shell"; key="F3"; flags="NoPluginPanels NoFolders";
  3.   action = function()
  4.     Keys('F4')
  5.     if Area.Dialog then Keys('Enter') end
  6.     if Area.Editor and bit64.band(Editor.State,0x200)~=0x200 then Keys('CtrlL') end
  7.   end;
  8. }
Кто знает, для чего служит строка 5?
(Вероятно, она задумана чтобы согласиться с каким-то подтверждением, но соглашаться со всем подряд это не есть хорошо)

Update:
  1. В области добавлена Search (https://bugs.farmanager.com/view.php?id=2853)
  2. Разрешена работа на плагиновых панелях
  3. Добавлен ряд условий срабатывания (condition)
  1. local LOCKED = 0x200
  2. Macro {
  3.   description="Use internal editor as viewer";
  4.   area="Shell Search"; key="F3";
  5.   flags="NoSendKeysToPlugins";
  6.   condition=function()
  7.     return APanel.Visible
  8.        and not APanel.Empty
  9.        and not APanel.Folder
  10.        and (not APanel.Plugin or band(APanel.OPIFlags,far.Flags.OPIF_REALNAMES)~=0)
  11.   end;
  12.   action=function()
  13.     Keys"F4"
  14.     if Dlg.Id==far.Guids.EditorOpenRSHId then Keys"Enter" end
  15.     if Area.Editor and band(Editor.State,LOCKED)==0 then Keys"CtrlL" end
  16.   end;
  17. }
Last edited by John Doe on Thu 06 Sep, 2018 16:24, edited 1 time in total.

2useven10
Posts: 3888
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 162 times

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

Post by 2useven10 » Fri 30 May, 2014 13:02

[x] Warn Editing Readonly files ?

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

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

Post by John Doe » Fri 30 May, 2014 13:08

Ага, причём гуид этого подтверждения ошибочно совпадает с EditorReloadId = "AFDAD388-494C-41E8-BAC6-BBE9115E1CC0"

Update
0002688: Требуется отдельный гуид для диалога подтверждения редактирования RO файла

User avatar
DrKnS
Posts: 5332
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 214 times

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

Post by DrKnS » Fri 30 May, 2014 16:10

А зачем NoPluginPanels?

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

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

Post by zg » Fri 30 May, 2014 16:13

DrKnS wrote:А зачем NoPluginPanels?
у плагина f3/f4 могут быть не связаны с просмотром/редактором.

User avatar
DrKnS
Posts: 5332
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 214 times

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

Post by DrKnS » Fri 30 May, 2014 16:34

zg wrote:у плагина f3/f4 могут быть не связаны с просмотром/редактором.
Не лучше ли тогда проверять OPIF_REALNAMES?

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

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

Post by zg » Fri 30 May, 2014 17:57

DrKnS wrote:
zg wrote:у плагина f3/f4 могут быть не связаны с просмотром/редактором.
Не лучше ли тогда проверять OPIF_REALNAMES?
можно и так, да.

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

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

Post by John Doe » Mon 02 Jun, 2014 20:34

https://github.com/FarGroup/FarManager/ ... hiftBS.lua

Когда-то было 3 макроса, но кто-то объединил в 1, забыв что для Shell нужен флаг NotEmptyCommandLine.
Можно так:

Update: http://forum.farmanager.com/viewtopic.p ... 46#p126646

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

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

Post by John Doe » Mon 02 Jun, 2014 20:40

Addons\Macros\Panel.AltBS.lua wrote:
  1. local StdM_AltBS
  2. Macro {
  3.   description="Use Alt-BS to undo folder changes";
  4.   area="Shell"; key="AltBS";
  5.   action=function()
  6.     Keys"AltF12"
  7.     StdM_AltBS = Object.CurPos == Object.ItemCount and not StdM_AltBS
  8.     if not StdM_AltBS then Keys"Up" end
  9.     Keys"ShiftEnter"
  10.   end;
  11. }
Кто-то может пояснить?

1. Из имени переменной StdM_AltBS абсолютно невозможно понять её назначение.
Вероятно она служит для обхода бага 4 (однако не полностью).
2. Неясно в каком случае условие Object.CurPos == Object.ItemCount может быть ложно. Насколько мне известно, при открытии курсор всегда на последнем элементе.2690

Update
Макрос родом из этой сборки: http://forum.farmanager.com/viewtopic.php?f=15&t=129
Когда-то уже пробовали улучшать: http://forum.farmanager.com/viewtopic.php?f=15&t=4902, http://forum.farmanager.com/viewtopic.php?f=15&t=5838, http://forum.farmanager.com/viewtopic.php?f=60&t=7075 (SimSU)

Предлагаю вот так:
  1. local sound = 0x30 -- MB_ICONEXCLAMATION
  2.  
  3. local Panels = "Shell QView Tree Info Search"
  4. Macro {
  5.   description="Go to previous folder in history";
  6.   area=Panels; key="AltBS";
  7.   action=function()
  8.     Keys"AltF12"
  9.     if Object.Bof and Object.ItemCount~=1 then -- the top is reached
  10.       mf.beep(sound)
  11.       Keys"Esc"
  12.       return
  13.     elseif Object.Eof then -- initial step, from the bottom of history
  14.       Keys"Enter"          --   * need to store current dir in history
  15.       Keys"AltF12"         --   * (and recall history to do regular step)
  16.     end
  17.     Keys"Up ShiftEnter"    -- regular step up
  18.   end
  19. }
  20.  
  21. Macro {
  22.   description="Go to next folder in history";
  23.   area=Panels; key="AltShiftBS";
  24.   action=function()
  25.     Keys"AltF12"
  26.     if Object.Eof then -- the bottom is reached
  27.       mf.beep(sound)
  28.       Keys"Esc"
  29.       return
  30.     end
  31.     Keys"Down ShiftEnter"
  32.   end
  33. }
Изменения по отношению к штатному макросу:
  1. Штатный: не работал в ряде случаев, логика основывалась на 'чётности' вызовов
  2. Новый: предпринимает специальные действия для того чтобы оставить в истории и текущую папку, что позволяет вернуться к ней
    (возможно баг в фаре https://bugs.farmanager.com/view.php?id=2694)
  3. Дополняющий макрос на AltShiftBS, для навигации в обратном направлении
Last edited by John Doe on Wed 05 Sep, 2018 12:19, edited 1 time in total.

Shmuel
Posts: 5833
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

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

Post by Shmuel » Mon 02 Jun, 2014 21:18

John Doe wrote:Addons\Macros\ShiftBS.lua
Когда-то было 3 макроса, но кто-то объединил в 1, забыв что для Shell нужен флаг NotEmptyCommandLine.
Спасибо, поправил.

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

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

Post by John Doe » Tue 03 Jun, 2014 12:21

John Doe wrote:Макрос ShiftF1.lua давно неактуален, рассчитан на MultiArc
Предлагаю переместить в дистрибутив Multiarc.
Если хотите, можно составить аналогичный для arclite, чтобы открывал список профилей. Хотя смысла мало, хотя бы потому, что по умолчанию список пуст.

Shmuel
Posts: 5833
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

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

Post by Shmuel » Wed 04 Jun, 2014 13:15

Может быть имеет смысл открывать тикеты на мантисе, по одному на макрос.
Я, например, не успеваю отслеживать ваши посты в реальном времени.
А здесь может и пропасть.

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

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

Post by John Doe » Wed 04 Jun, 2014 13:18

Я готовлю обновления для всех макросов. В некоторых существенные изменения, в некоторых просто форматирование.
На мантис пойдёт скопом.

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

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

Post by John Doe » Thu 12 Jun, 2014 15:15

Panel.CtrlIns...lua

Усовершенствованная версия:
  1. Уточнены условия запуска (используется condition)
  2. Работа и с плагиновыми панелями
  1. -- if Ctrl+Ins pressed on '..' and command line is empty and no selected items
  2. -- then copy full path of the current folder to clipboard
  3.  
  4. local function not_empty(str)
  5.   return str~="" and str
  6. end
  7.  
  8. Macro {
  9.   description="Copy current path when pressed on '..'";
  10.   area="Shell"; key="CtrlIns";
  11.   condition=function()
  12.     return APanel.Visible and APanel.Folder and APanel.Current==".."
  13.        and CmdLine.Empty and not APanel.Selected
  14.   end;
  15.   action=function()
  16.     far.CopyToClipboard(not_empty(APanel.UNCPath) or not_empty(APanel.Format) or APanel.Path0)
  17.   end
  18. }
Last edited by John Doe on Wed 05 Sep, 2018 12:21, edited 1 time in total.

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

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

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

zg wrote:копипаста — плохо.
Подыму вопрос снова.
Как лучше?
    1. Macro {
    2.   description="Scroll text in internal viewer";
    3.   area="Viewer"; key="CtrlUp CtrlDown";
    4.   action=function()
    5.     Keys(akey(1):match(".%l+$"))
    6.   end;
    7. }
    1. Macro {
    2.   description="Scroll Down text in internal viewer";
    3.   area="Viewer"; key="CtrlDown";
    4.   action=function()
    5.     Keys"Down"
    6.   end;
    7. }
    8.  
    9. Macro {
    10.   description="Scroll Up text in internal viewer";
    11.   area="Viewer"; key="CtrlUp";
    12.   action=function()
    13.     Keys"Up"
    14.   end;
    15. }
Другой пример:
Третий:
Четвёртый: Panel.CtrlShiftPgUpDn.lua — хождение по папкам одного уровня

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

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

Post by zg » Mon 23 Jun, 2014 14:57

John Doe wrote:Я в начале темы пытался отовсюду исключить копипасту, но не всем понравилось.
исключение копипасты — это не только слитие всех макросов в один. в луа, внезапно, есть функции.

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

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

Post by John Doe » Mon 23 Jun, 2014 15:02

Ok.
На четырёх приведённых выше примерах, где вы считаете целесообразным ввести какую-то общую функцию?

Post Reply

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