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

Здесь обсуждается всё, что касается макросов.
User avatar
zg
zero-gravity
Posts: 5492
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 73 times
Contact:

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

Post by zg » Tue 28 Nov, 2017 19:38

Latest post of the previous page:

John Doe wrote:
Tue 28 Nov, 2017 17:15
Если перейти в панели QView (т.е. она будет на активной панели), и нажать CtrlQ, то панель станет файловой, но макрообласть не изменится!!
линейка функциональных клавиш тоже не изменится. и возможно что-то ещё. пишите на мантис.
Last edited by zg on Tue 28 Nov, 2017 19:39, edited 1 time in total.

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

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

Post by John Doe » Tue 28 Nov, 2017 21:05

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

Code: Select all

Macro {
  description="Use Alt-digit to switch between screens";
  area="Editor Viewer Shell QView Tree Info Desktop"; key="/[LR]Alt[0-9]/";
  flags="NoSendKeysToPlugins";
  action=function()
    local key = mf.akey(1,1):sub(-1)
    Keys("F12", Object.CheckHotkey(key)~=0 and key or "Esc")
  end;
}
  1. Учитывается случай, когда нажат хоткей, не имеющий соответствия в Screens
  2. Добавления/исправления в area
  3. Форматирование

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

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

Post by John Doe » Tue 28 Nov, 2017 22:21

Code: Select all

local APANEL = 0
local EXT,NAME = 8,4 --fsplit
local SELECTED = 8   --Panel.Item
local NAMES = 2      --Panel.Select
-- При непустой командной строке макрос не вызывается чтобы можно пользоваться первоначальной
-- функцией сочетания CtrlShiftIns - Поместить помеченные имена в Буфер Обмена
Macro { description="Пометить вместе с htm-файлом и парную ему папку";
  area="Shell"; key="CtrlShiftIns"; flags="EmptyCommandLine";
  action=function()
    local Current = APanel.Current
    local len = ("_files"):len()
    local Ext = Current:sub(-len)
    local Name
    if Ext=="_files" then
      Name = Current:sub(1,-len)
    else
      Ext = mf.fsplit(Current,EXT)
      Name = mf.fsplit(Current,NAME)
    end
    local pair1,pair2
    if Ext==".htm" or Ext==".html" then
      pair1,pair2 = ".files","_files"
    elseif Ext==".files" or Ext=="_files" then
      pair1,pair2 = ".htm",".html"
    end
    if pair1 then
      local action = Panel.Item(APANEL,0,SELECTED) and 0 or 1
      local items = { APanel.Current, Name..pair1, Name..pair2}
      Panel.Select(APANEL,action,NAMES,table.concat(items,"\n"))
    end
  end;
}

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

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

Post by John Doe » Fri 08 Dec, 2017 15:24

Code: Select all

	Macro {
	  description="Продолжить поиск/замену в обратном направлении [S&R]";
	  area="Editor"; key="AltF7";
	  action=function()
	    Keys("F11")
	    if Object.CheckHotkey("7")~=0 then
	      Keys("7 1")
	    else
	      Keys("Esc AKey")
	    end
	  end;
	}
Пример по нынешним временам не очень.
Как бы иначе проиллюстрировать Object.CheckHotkey?

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

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

Post by John Doe » Mon 03 Sep, 2018 11:57

Планирую оформить все предложения в виде пуллреквеста.
Как лучше это сделать:
1. каждый макрос отдельно
2. все скопом
3. небольшие изменения - скопом, а те что могут вызвать вопросы - отдельно

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

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

Post by zg » Mon 03 Sep, 2018 11:59

3.

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

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

Post by John Doe » Wed 05 Sep, 2018 16:33

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

Code: Select all

if not panel.CheckPanelsExist() then return end -- far.exe -v -e
local F6_SWITCH_ALLOWED = 0x00000002
Macro {
  description="Quit from editor/viewer and position to the current file";
  area="Editor Viewer"; key="CtrlF10";
  flags="NoSendKeysToPlugins";
  condition=function()
    return band(Editor.State,F6_SWITCH_ALLOWED)~=0 -- check if CtrlF10 function is available
  end;
  action=function()
    Keys"CtrlF10 Esc"
    if Area.Editor or Area.Viewer or Area.Desktop then
      Keys"F12 1"
    end
  end;
}
  1. Если фар запущен в режиме редактора/вьюера, то не грузим макрос (не имеет смысла, панелей нет)
  2. Ctrl+F10 в некоторых случаях не работает, добавлен condition для проверки.
  3. После закрытия редактора/вьювера не всегда сразу попадаем в панели, добавлена обработка этого случая
Last edited by John Doe on Wed 05 Sep, 2018 16:34, edited 1 time in total.

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

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

Post by zg » Wed 05 Sep, 2018 17:30

а почему не if not Area.Shell? хотя вообще проверка не нужна.
Last edited by zg on Wed 05 Sep, 2018 17:32, edited 1 time in total.

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

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

Post by John Doe » Wed 05 Sep, 2018 17:46

Нужна, потому что не факт что по Esc мы вообще выйдем, если например редактор не сохранён.

А вот пункт 2 мне помниться правили в фаре, но почему-то не работает.. Завтра перепроверю (может в модальности дело)

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

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

Post by zg » Wed 05 Sep, 2018 18:14

не учтён случай немодального диалога.

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

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

Post by John Doe » Wed 05 Sep, 2018 18:24

Это сознательно, поскольку довольно громоздко проверять (с привлечением апи плагинов), случай же в настоящий момент исключительно гипотетический.

Можно конечно жать F12 и по факту проверять открылся ли список экранов..
Last edited by John Doe on Wed 05 Sep, 2018 18:26, edited 1 time in total.

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

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

Post by John Doe » Thu 06 Sep, 2018 08:47

CtrlF10.lua
  1. if not panel.CheckPanelsExist() then return end -- far.exe -v -e
  2.  
  3. local F6_ALLOWED,MODAL = 0x00000002,0x00000800
  4. local function CtrlF10_enabled()
  5.   local State = Area.Viewer
  6.             and band(Viewer.State,MODAL)
  7.              -- CtrlF10 is forbidden in modal viewer
  8.              or band(Editor.State,bor(F6_ALLOWED,MODAL))
  9.              -- CtrlF10 is forbidden in modal editor,
  10.              -- unless it opened with explicit EF_ENABLE_F6 flag
  11.   return State~=MODAL                          
  12. end
  13.  
  14. Macro {
  15.   description="Quit from editor/viewer and position to the current file";
  16.   area="Editor Viewer"; key="CtrlF10";
  17.   flags="NoSendKeysToPlugins";
  18.   condition=CtrlF10_enabled;
  19.   action=function()
  20.     Keys"CtrlF10 Esc F12"
  21.     if Menu.Id==far.Guids.ScreensSwitchId then Keys"1" end
  22.   end;
  23. }
  1. Уточнена проверка доступности функции CtrlF10
  2. Вместо проверки макрообласти попытка переключения через Screens производится всегда (для упрощения кода)

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

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

Post by John Doe » Thu 06 Sep, 2018 11:17

Немного обновлён Panel.AltBS.lua

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

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

Post by John Doe » Thu 06 Sep, 2018 16:25

Немного обновлены Panel.CtrlIns...lua, F3.lua

User avatar
sToLp
Posts: 817
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 79 times
Been thanked: 6 times

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

Post by sToLp » Wed 12 Sep, 2018 15:11

Исходя из моей субъективной практики, назначаемые на CtrlIns вызываемые из панелей макросы целесообразнее делать независимыми друг от друга, а именно:

1) копировать комстроку;

2) копировать имена выбранных в панели элементов, независимо от того где находится курсор и пуста или нет комстрока;

3) копировать имя элемента под курсором (если курсор на «..», то имя текущей папки), независимо от того есть ли в панели выбранные элементы и пуста ли или нет комстрока;

4) копировать полный путь к текущей папке, независимо от того где находится курсор, есть ли в панели выбранные элементы и пуста ли или нет комстрока;

и использовать меню выбора макросов.

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

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

Post by John Doe » Thu 20 Sep, 2018 07:44

sToLp wrote:
Wed 12 Sep, 2018 15:11
и использовать меню выбора макросов.
Полагаю, для этого достаточно будет убрать некоторые из условий в condition.
Но это только для вашей практики использования, в остальных же случаях они вовсе не кажутся мне лишними.
Или я что-то упускаю?

Post Reply

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