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

Здесь обсуждается всё, что касается макросов.
Shmuel
Posts: 6067
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 300 times

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

Post by Shmuel »

Latest post of the previous page:

den po wrote:а тем временем с фаром до сих пор идут CtrlDel.lua и WindowsGUI.lua, в которых используется старый вариант flags="Selection"
Большое спасибо за репорт. Исправлено.

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

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

Post by John Doe »

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: 4025
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 5 times
Been thanked: 181 times

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

Post by 2useven10 »

[x] Warn Editing Readonly files ?

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

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

Post by John Doe »

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

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

User avatar
DrKnS
Posts: 5570
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 7 times
Been thanked: 291 times

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

Post by DrKnS »

А зачем NoPluginPanels?

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

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

Post by zg »

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

User avatar
DrKnS
Posts: 5570
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 7 times
Been thanked: 291 times

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

Post by DrKnS »

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

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

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

Post by zg »

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

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

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

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: 12738
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 36 times
Been thanked: 282 times

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

Post by John Doe »

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

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

Post by Shmuel »

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

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

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

Post by John Doe »

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

Shmuel
Posts: 6067
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 300 times

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

Post by Shmuel »

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

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

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

Post by John Doe »

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

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

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

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. -- 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: 12738
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 36 times
Been thanked: 282 times

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

Post by John Doe »

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 — хождение по папкам одного уровня

Post Reply

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