Здесь обсуждается всё, что касается макросов.
-
John Doe
- Бюрократ
- Posts: 12526
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 33 times
- Been thanked: 230 times
Post
by John Doe » Tue 28 Nov, 2017 21:05
Latest post of the previous page:
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;
}
- Учитывается случай, когда нажат хоткей, не имеющий соответствия в
Screens
- Добавления/исправления в
area
- Форматирование
John Doe
-
John Doe
- Бюрократ
- Posts: 12526
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 33 times
- Been thanked: 230 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;
}
John Doe
-
John Doe
- Бюрократ
- Posts: 12526
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 33 times
- Been thanked: 230 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?
John Doe
-
John Doe
- Бюрократ
- Posts: 12526
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 33 times
- Been thanked: 230 times
Post
by John Doe » Mon 03 Sep, 2018 11:57
Планирую оформить все предложения в виде пуллреквеста.
Как лучше это сделать:
1. каждый макрос отдельно
2. все скопом
3. небольшие изменения - скопом, а те что могут вызвать вопросы - отдельно
John Doe
-
zg
- zero-gravity
- Posts: 5648
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 112 times
-
Contact:
Post
by zg » Mon 03 Sep, 2018 11:59
3.
zg
-
John Doe
- Бюрократ
- Posts: 12526
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 33 times
- Been thanked: 230 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;
}
- Если фар запущен в режиме редактора/вьюера, то не грузим макрос (не имеет смысла, панелей нет)
- Ctrl+F10 в некоторых случаях не работает, добавлен condition для проверки.
- После закрытия редактора/вьювера не всегда сразу попадаем в панели, добавлена обработка этого случая
Last edited by
John Doe on Wed 05 Sep, 2018 16:34, edited 1 time in total.
John Doe
-
zg
- zero-gravity
- Posts: 5648
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 112 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.
zg
-
John Doe
- Бюрократ
- Posts: 12526
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 33 times
- Been thanked: 230 times
Post
by John Doe » Wed 05 Sep, 2018 17:46
Нужна, потому что не факт что по Esc мы вообще выйдем, если например редактор не сохранён.
А вот пункт 2 мне помниться правили в фаре, но почему-то не работает.. Завтра перепроверю (может в модальности дело)
John Doe
-
zg
- zero-gravity
- Posts: 5648
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 112 times
-
Contact:
Post
by zg » Wed 05 Sep, 2018 18:14
не учтён случай немодального диалога.
zg
-
John Doe
- Бюрократ
- Posts: 12526
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 33 times
- Been thanked: 230 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.
John Doe
-
John Doe
- Бюрократ
- Posts: 12526
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 33 times
- Been thanked: 230 times
Post
by John Doe » Thu 06 Sep, 2018 08:47
CtrlF10.lua
if not panel.CheckPanelsExist() then return end -- far.exe -v -e
local F6_ALLOWED,MODAL = 0x00000002,0x00000800
local function CtrlF10_enabled()
local State = Area.Viewer
and band(Viewer.State,MODAL)
-- CtrlF10 is forbidden in modal viewer
or band(Editor.State,bor(F6_ALLOWED,MODAL))
-- CtrlF10 is forbidden in modal editor,
-- unless it opened with explicit EF_ENABLE_F6 flag
return State~=MODAL
end
Macro {
description="Quit from editor/viewer and position to the current file";
area="Editor Viewer"; key="CtrlF10";
flags="NoSendKeysToPlugins";
condition=CtrlF10_enabled;
action=function()
Keys"CtrlF10 Esc F12"
if Menu.Id==far.Guids.ScreensSwitchId then Keys"1" end
end;
}
- Уточнена проверка доступности функции CtrlF10
- Вместо проверки макрообласти попытка переключения через Screens производится всегда (для упрощения кода)
John Doe
-
sToLp
- Posts: 938
- Joined: Thu 23 Jul, 2009 10:16
- Has thanked: 107 times
- Been thanked: 11 times
Post
by sToLp » Wed 12 Sep, 2018 15:11
Исходя из моей субъективной практики, назначаемые на CtrlIns вызываемые из панелей макросы целесообразнее делать независимыми друг от друга, а именно:
1) копировать комстроку;
2) копировать имена выбранных в панели элементов, независимо от того где находится курсор и пуста или нет комстрока;
3) копировать имя элемента под курсором (если курсор на «..», то имя текущей папки), независимо от того есть ли в панели выбранные элементы и пуста ли или нет комстрока;
4) копировать полный путь к текущей папке, независимо от того где находится курсор, есть ли в панели выбранные элементы и пуста ли или нет комстрока;
и использовать меню выбора макросов.
sToLp
-
John Doe
- Бюрократ
- Posts: 12526
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 33 times
- Been thanked: 230 times
Post
by John Doe » Thu 20 Sep, 2018 07:44
sToLp wrote: ↑Wed 12 Sep, 2018 15:11
и использовать меню выбора макросов.
Полагаю, для этого достаточно будет убрать некоторые из условий в condition.
Но это только для вашей практики использования, в остальных же случаях они вовсе не кажутся мне лишними.
Или я что-то упускаю?
John Doe
-
sToLp
- Posts: 938
- Joined: Thu 23 Jul, 2009 10:16
- Has thanked: 107 times
- Been thanked: 11 times
Post
by sToLp » Sun 14 Oct, 2018 10:27
John Doe wrote: ↑Thu 20 Sep, 2018 07:44
Но это только для вашей практики использования
Насколько потребность в упрощении субъективна, судить не мне.
И поскольку заявки упростить эти макросы больше не поступают — то пусть всё так и остаётся как есть сейчас.
Ведь примеры с применением condition тоже полезны сами по себе.
sToLp
-
John Doe
- Бюрократ
- Posts: 12526
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 33 times
- Been thanked: 230 times
Post
by John Doe » Thu 31 Oct, 2019 20:47
HaRT wrote:[...]
И что вы хотите этим сказать?
Last edited by
John Doe on Sun 03 Nov, 2019 11:52, edited 1 time in total.
John Doe