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

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

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

Post by John Doe »

Latest post of the previous page:

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

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

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

Post by 2useven10 »

[x] Warn Editing Readonly files ?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

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

Update
0002688: Требуется отдельный гуид для диалога подтверждения редактирования RO файла
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

А зачем NoPluginPanels?
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

DrKnS wrote:А зачем NoPluginPanels?
у плагина f3/f4 могут быть не связаны с просмотром/редактором.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

zg wrote:у плагина f3/f4 могут быть не связаны с просмотром/редактором.
Не лучше ли тогда проверять OPIF_REALNAMES?
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

DrKnS wrote:
zg wrote:у плагина f3/f4 могут быть не связаны с просмотром/редактором.
Не лучше ли тогда проверять OPIF_REALNAMES?
можно и так, да.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

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: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

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

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.  
  4.  
  5. local Panels = "Shell QView Tree Info Search"
  6.  
  7. Macro {
  8.  
  9.   description="Go to previous folder in history";
  10.  
  11.   area=Panels; key="AltBS";
  12.  
  13.   action=function()
  14.  
  15.     Keys"AltF12"
  16.  
  17.     if Object.Bof and Object.ItemCount~=1 then -- the top is reached
  18.  
  19.       mf.beep(sound)
  20.  
  21.       Keys"Esc"
  22.  
  23.       return
  24.  
  25.     elseif Object.Eof then -- initial step, from the bottom of history
  26.  
  27.       Keys"Enter"          --   * need to store current dir in history
  28.  
  29.       Keys"AltF12"         --   * (and recall history to do regular step)
  30.  
  31.     end
  32.  
  33.     Keys"Up ShiftEnter"    -- regular step up
  34.  
  35.   end
  36.  
  37. }
  38.  
  39.  
  40.  
  41. Macro {
  42.  
  43.   description="Go to next folder in history";
  44.  
  45.   area=Panels; key="AltShiftBS";
  46.  
  47.   action=function()
  48.  
  49.     Keys"AltF12"
  50.  
  51.     if Object.Eof then -- the bottom is reached
  52.  
  53.       mf.beep(sound)
  54.  
  55.       Keys"Esc"
  56.  
  57.       return
  58.  
  59.     end
  60.  
  61.     Keys"Down ShiftEnter"
  62.  
  63.   end
  64.  
  65. }
Изменения по отношению к штатному макросу:
  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: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote:Addons\Macros\ShiftBS.lua
Когда-то было 3 макроса, но кто-то объединил в 1, забыв что для Shell нужен флаг NotEmptyCommandLine.
Спасибо, поправил.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

John Doe wrote:Макрос ShiftF1.lua давно неактуален, рассчитан на MultiArc
Предлагаю переместить в дистрибутив Multiarc.
Если хотите, можно составить аналогичный для arclite, чтобы открывал список профилей. Хотя смысла мало, хотя бы потому, что по умолчанию список пуст.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

Может быть имеет смысл открывать тикеты на мантисе, по одному на макрос.
Я, например, не успеваю отслеживать ваши посты в реальном времени.
А здесь может и пропасть.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Я готовлю обновления для всех макросов. В некоторых существенные изменения, в некоторых просто форматирование.
На мантис пойдёт скопом.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Panel.CtrlIns...lua

Усовершенствованная версия:
  1. Уточнены условия запуска (используется condition)
  2. Работа и с плагиновыми панелями
  1. -- if Ctrl+Ins pressed on '..' and command line is empty and no selected items
  2.  
  3. -- then copy full path of the current folder to clipboard
  4.  
  5.  
  6.  
  7. local function not_empty(str)
  8.  
  9.   return str~="" and str
  10.  
  11. end
  12.  
  13.  
  14.  
  15. Macro {
  16.  
  17.   description="Copy current path when pressed on '..'";
  18.  
  19.   area="Shell"; key="CtrlIns";
  20.  
  21.   condition=function()
  22.  
  23.     return APanel.Visible and APanel.Folder and APanel.Current==".."
  24.  
  25.        and CmdLine.Empty and not APanel.Selected
  26.  
  27.   end;
  28.  
  29.   action=function()
  30.  
  31.     far.CopyToClipboard(not_empty(APanel.UNCPath) or not_empty(APanel.Format) or APanel.Path0)
  32.  
  33.   end
  34.  
  35. }
Last edited by John Doe on Wed 05 Sep, 2018 12:21, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

zg wrote:копипаста — плохо.
Подыму вопрос снова.
Как лучше?
    1. Macro {
    2.  
    3.   description="Scroll text in internal viewer";
    4.  
    5.   area="Viewer"; key="CtrlUp CtrlDown";
    6.  
    7.   action=function()
    8.  
    9.     Keys(akey(1):match(".%l+$"))
    10.  
    11.   end;
    12.  
    13. }
    1. Macro {
    2.  
    3.   description="Scroll Down text in internal viewer";
    4.  
    5.   area="Viewer"; key="CtrlDown";
    6.  
    7.   action=function()
    8.  
    9.     Keys"Down"
    10.  
    11.   end;
    12.  
    13. }
    14.  
    15.  
    16.  
    17. Macro {
    18.  
    19.   description="Scroll Up text in internal viewer";
    20.  
    21.   area="Viewer"; key="CtrlUp";
    22.  
    23.   action=function()
    24.  
    25.     Keys"Up"
    26.  
    27.   end;
    28.  
    29. }
Другой пример:
Третий:
Четвёртый: Panel.CtrlShiftPgUpDn.lua — хождение по папкам одного уровня
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

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

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