Макрос, позволяющий RClick-ом выделять / вызывать меню

Здесь выкладываются готовые к использованию макросы и скрипты.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by IgorZ »

В Conemu есть удобная фича: короткий Rclick выделяет файл, а длинный вызывает контекстное меню. Но не всегда возможно использовать Conemu. Для чистого Far-а мной написан данный макрос. В качестве основы для первоначальной версии использован макрос Max Rusov для вызова EMenu.

Данный макрос вызывается по нажатию правой кнопки мыши. Если время нажатия правой кнопки мыши меньше MinDelay, выделяется файл, иначе вызывается EMenu.

Версия 1.0. Для MacroLib.

Версия 2.0, для чистого lua.
Последняя версия также есть во вложении.
Attachments
RClick.lua.7z
(697 Bytes) Downloaded 221 times
2useven10
Posts: 5204
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Re: Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by 2useven10 »

IgorZ wrote:Миллисекунды в качестве длительности нажатия были бы удобнее, но чего нет, того нет.
Far.UpTime ?
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by IgorZ »

2useven10 wrote:
IgorZ wrote:Миллисекунды в качестве длительности нажатия были бы удобнее, но чего нет, того нет.
Far.UpTime ?
Хм. Действительно, упустил из виду. Спасибо.
Даже проще получается.
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by SUSim »

Хороший макрос, но только публиковать его надо на Макролибе
SimSU ··· ·· -- ··· ··-
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by IgorZ »

Добавлена версия для чистого lua.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by John Doe »

Тема перенесена из "Обсуждения".
Просьба добавить в шапку полный текст макроса.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by IgorZ »

John Doe wrote:Просьба добавить в шапку полный текст макроса.
Сделано.

P. S. Просьба сделать первый пост дублирующимся на каждой странице.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by John Doe »

WindowsXP
Вместе с графическим меню в 90% случаев выскакивает и меню консоли Изменить {Пометить/Вставить/...}
С чем связано? Можно ли побороть (кроме как поменять вызов на текстовое меню)?

Пробовал уменьшать MinDelay, не влияет.

Update
Немного помогла настройка emenu: Menu position (•) At the mouse cursor
Но проблема видимо глубже: http://forum.farmanager.com/viewtopic.php?f=9&t=7540
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by John Doe »

Пока разбирался с описанной выше проблемой обнаружил у макроса пару недостатков:
  1. Может реагировать на двойное нажатие, без удержания. Решается небольшим изменением логики.
    (Кстати в комментарии неточность: сказано будто меню вызывается после отпускания)
  2. При вызове меню макрос инвертирует пометку текущего элемента, в некоторых случаях зря: под указателем мыши может находиться пустая колонка панели, в этом случае rightclick ничего не помечает. (по умолчанию, но см. hlf:@Panel.RightClickRule)
    Можно побороть, если контролировать изначальное состояние панелей.
    (Кстати с этими пустыми колонками и без того не просто)
  3. Есть смысл распространить действие макроса на область Tree.
Вот мой вариант:
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by John Doe »

Альтернативная модификация: меню вызывается сочетанием ЛКМ + ПКМ (MsLClick+MsRClick):
Особенности:
  • При использовании графического меню (rclk_gui:) меню вызывается после отпускания кнопки мыши (в целях обхода бага).
  • При использовании текстового меню (rclk_txt:) необходимо убедиться, что в настройках EMenu активна опция (•) В позиции курсора мыши, иначе меню будет закрываться сразу после отпускания кнопок мыши.
    (Альтернативно: открыть Параметры/Настройки меню, и для обоих клавиш изменить значение на Ничего не делать)
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by John Doe »

Поведение управляется параметрами:

Code: Select all

local GUImenu = true  -- показывать графическое / или текстовое меню
local HoldMode = true -- срабатывать при удержании ПКМ / или при нажатии ПКМ+ЛКМ
Варианта вызова:
  • Удержанием правой клавиши мыши (ПКМ)
  • Одновременным нажатием правой и левой клавиши (ПКМ+ЛКМ).
    Можно нажимать одну, а потом другую клавишу, порядок не принципиален.
    Примечание:
Особенности:
  • Есть возможность вызывать как текстовое меню, так и графическое.
    Можно выбрать какой из вариантов будет основным, а какой дополнительным.
    (Дополнительный вариант срабатывает при удержании модификаторов Shift или Ctrl)
  • При использовании графического меню (rclk_gui:) меню вызывается после отпускания кнопки мыши (в целях обхода бага).
Attachments
RightClickAlt2.lua.7z
(1.25 KiB) Downloaded 96 times
KonovaPE
Posts: 7
Joined: Wed 22 Oct, 2014 13:43

Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by KonovaPE »

Не знал, что color в code не отрабатывает. Без выделения цвета:

Code: Select all

RClick выделяет файл/ длинный RClick вызывает контекстное меню (c) IgorZ
...
local EMPath = win.GetEnv("FARHOME").."\\Plugins\\EMenu\\EMenu.dll"
...

local function OnTimer()
timer:Close() timer = nil
if Mouse.Button==2 and (MouseClickOn==APanel.Path.."\\"..APanel.Current) then
 Panel.Select(0,2,1)
 Plugin.Load(EMPath,0)
 far.MacroPost('Plugin.Command("'..EMenu..'","rclk_txt:")')
end
MouseClickOn = ""
end

Macro{
 area="Shell"; key="MsRClick"; description="EMenu: mouse activation";
 condition=function() return not timer end; action=function()
 Plugin.Unload(EMPath);
 Keys("MSRClick")
 MouseClickOn = APanel.Path.."\\"..APanel.Current
 timer = far.Timer(MinDelay,OnTimer)
end;
}
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by John Doe »

1. Если плагин лежит в обычном месте (как и указано в скрипте), то он в любом случае будет загружен при старте фара.
2. Фактически EMenu загружается не при старте, а при первом использовании.
3. Даже будучи загруженным, ресурсов он особо не потребляет, и в фоне не работает. Смысла выгружать соответственно мало.
KonovaPE
Posts: 7
Joined: Wed 22 Oct, 2014 13:43

Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by KonovaPE »

Да, но скрипт в зависимости от версии FAR'а то работал, то не работал, а так будет работать всегда
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Макрос, позволяющий RClick-ом выделять / вызывать меню

Post by John Doe »

KonovaPE wrote: в зависимости от версии FAR'а то работал
Это что-то новое. С чего бы ему?
Post Reply

Return to “Полезные макросы и скрипты”