Замечу, что это возможно реализовать и текущими средствами, использую функцию condition, которая бы изменяла приоритет в зависимости от некоторого внешнего флага.
Меню конфликта как средство организации макросов
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Меню конфликта как средство организации макросов
Last edited by John Doe on Thu 29 Nov, 2018 13:48, edited 1 time in total.
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Поведение, когда нужно сделать выбор из нескольких макросов
Latest post of the previous page:
sToLp, вот мне непонятно, почему вы (и некоторые другие) делаете в своих файлах строки длиной 280 символов или больше. Что у вас монитор такой шикарный или свёрткой в редакторе пользуетесь?Поведение, когда нужно сделать выбор из нескольких макросов
И то — вот сейчас под рукой старый Philips 298X4 29” (а периодически могут быть и намного лучше), и другое — изредка плагин EditWrap с его штатным макросом, а также, пожалуй, и третье — привычка, и четвёртое — отсутствие поводов делать иначе. И поэтому если Вы порекомендуете какой максимальной длины должны быть строки, то, полагаю, что сумею приноровиться.
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Поведение, когда нужно сделать выбор из нескольких макросов
Нет, в данном случае ничего не порекомендую, мне просто было любопытно.
Но раз уже вы спросили - я стараюсь не превышать длину 120 символов.
- zg
- zero-gravity
- Posts: 6036
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Поведение, когда нужно сделать выбор из нескольких макросов
на fullhd при шрифте consolas 16 влезает 238 колонок. ничего шикарного.
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Поведение, когда нужно сделать выбор из нескольких макросов
У вас тут не всё хорошо.
1. Макрос Common/Shift как отдельный врядли нужен, лучше включите его в ваш Menu/Shift
2.
condition=LFS_Exist and isFullMenu;
это работает не так, как вам хотелось. Необходимо объединить в одну функцию.3. Если вы хотите использовать тот же подход в другом макрофайле, то как уже говорилось выше, необходимы изменения (глобальная переменная либо модуль).
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Поведение, когда нужно сделать выбор из нескольких макросов
Да что там пытаться.
Code: Select all
local function LFS_condition(...) return LFS_Exist(...) and (fullmenu and 100 or true) end
В простейшем случае вместо
local fullmenu
можно не объявлять, а макросе-переключателе адресовать переменную из _G: _G.fullmenu = not fullmenu
.- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Меню конфликта как средство организации макросов
sToLp, начал проникаться вашей идеей, и поэтому выделил часть обсуждения в собственную тему (эту).
Это конечно условно, поскольку идея всплывала и ранее, см. Поведение, когда нужно сделать выбор из нескольких макросов.
Однако вы нигде не описываете идею в целом, а без этого сходу может быть сложно понять суть и смысл отдельных ваших предложений.
Итак, возьму на себя попытку описать идею целиком, а вы поправьте если что.
Проблема: удобных кнопкосочетаний всегда не хватает, а при большом количестве команд (полезных, но не каждый день используемых) их и запомнить проблематично, и поэтому всё равно приходится открывать макробраузер, и искать их.
Решение: сгруппировать связанные команды в набор меню, уменьшив таким образом количество основных кнопкосочетаний.
Команды при этом могут вызываться:
Преимущества именно такого подхода:
Это конечно условно, поскольку идея всплывала и ранее, см. Поведение, когда нужно сделать выбор из нескольких макросов.
Однако вы нигде не описываете идею в целом, а без этого сходу может быть сложно понять суть и смысл отдельных ваших предложений.
Итак, возьму на себя попытку описать идею целиком, а вы поправьте если что.
Проблема: удобных кнопкосочетаний всегда не хватает, а при большом количестве команд (полезных, но не каждый день используемых) их и запомнить проблематично, и поэтому всё равно приходится открывать макробраузер, и искать их.
Решение: сгруппировать связанные команды в набор меню, уменьшив таким образом количество основных кнопкосочетаний.
Команды при этом могут вызываться:
- выбором из меню
- хоткеем из меню, в частности — последовательностями (Запуск макросов кнопкосочетаниями, через меню конфликта макросов )
- любая команда представляет собой полноценный макрос, поэтому может быть вызвана и без меню (если снабжена отдельным кнопкосочетанием)
Преимущества именно такого подхода:
- Возможность создания динамических контекстных меню, пункты к которые включаются в зависимости от определённых условий (area/priority/condition).
- Отдельные команды одного меню получаются независимы, и могут определяться в разных макрофайлах.
- Создание такого меню может быть проще для пользователя, поскольку само меню программировать как-бы не требуется.
Меню конфликта как средство организации макросов
есть ещё идея по “отсечению” автоназначения/срабатывания хоткеев в списке ниже видимых/невидимых разделителей (по флагу, например как разделители в пользовательском меню — "--:" - видимый, а "---:" - невидимый) списка элементов — снимаем проблему запоминания не часто нужных и совместно с приоритетом в сортировке - компонуем в группы, не привязываясь к стандартным настройкам и содержанию макросов. сохраняем обратную совместимость.
Меню конфликта как средство организации макросов
Собственно я бы скорее называл это не идеей, а подходом, способом или методом. И Вы, на мой взгляд, весьма цельно ухватили и верно охарактеризовали аспекты практикуемого мною подхода к формированию удобных для повседневного использования меню запуска макросов с помощью замечательного инструмента — меню выбора макроса. И Проблему, и Решение, и Реализацию. За что я Вам очень признателен.
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Меню конфликта как средство организации макросов
В фаре подобные меню выводятся в нескольких случаях: несколько плагинов претендуют на один файл, маски несколько ассоциаций подходят к запускаемому файлу, и наконец несколько макросов с равным приоритетом.sToLp wrote: ↑Thu 29 Nov, 2018 19:28 Со своей стороны я бы отметил лишь один, но существенный, по моему убеждению, нюанс. Весьма желательно используемый инструмент называть не "меню конфликта", а "меню выбора", что более соответствует его сути и наименованию, указанному в справке. Вплоть до того, что просил бы Вас изменить это и в названии темы.
Традиционно эти меню назывались на форуме "меню конфликта", поскольку это однозначно даёт понять о чём идёт речь.
"Меню выбора" это тоже верно, но менее информативно, поскольку "выбор" доступен в очень большом количестве мест.
С точки зрения вашего подхода действительно одноимённые клавиши задаются намеренно, чтобы создать список, из которого пользователь сделает выбор.
Однако список строится вполне конкретным способом, используя встроенную функциональность, и я посчитал важным в названии темы именно это подчеркнуть.
Меню конфликта как средство организации макросов
Изменения по этим рекомендациям внёс так, как сумел их понять. Главное, что концепт . А попытаюсь внести попозже.John Doe wrote: ↑Wed 28 Nov, 2018 19:28Code: Select all
local function LFS_condition(...) return LFS_Exist(...) and (fullmenu and 100 or true) end
Меню конфликта как средство организации макросов
Да, действительно, так существенно удобнее и быстрее.John Doe wrote: ↑Tue 27 Nov, 2018 14:16 дублировать весь код дважды это не годится, когда можно запросто автоматизировать:
После чего все определения, в которые нужно добавить псевдоклавши, можно сделать заменивCode: Select all
local function MMacro(m) m.key = m.key:gsub("%S+","%0 _%0") return Macro(m) end
Macro
наMMacro
.
Благодарю Вас за то, что познакомили с таким полезным методом!
А не могли бы Вы для того, чтобы не нужно было вставлять этот макрос в каждый файл, преобразовать его в модуль? Сам-то я с этим делом пока что не справлюсь.
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Меню конфликта как средство организации макросов
В данном случае функция достаточно проста, чтобы прямо так вставлять в каждый файл.
Потому что использование из модуля тоже займёт строчку:
Code: Select all
local Macro = require"stolps".MMacro(Macro)
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Меню конфликта как средство организации макросов
Возвращаясь к самому подходу.
Сейчас вы сразу привязываете пункт меню к конкретной клавише, в примерах выше это "AltShiftS".
А я бы вместо этого использовал бы "псевдоклавишу", название данного меню, например "LFSearch".
И уже потом привязал бы к клавише:
Code: Select all
Macro { description="LFSearch actions menu";
area="Editor"; key="AltShiftS";
action=function()
mf.eval("LFSearch",2)
end;
}