Задача: переключаться циклически между разными режимами отображения панели (обычный, эскизы, плитка) плагина ConEmu (F11 -> ConEmu Panel Views) по нажатию CtrlAltRight/CtrlAltLeft.
Список из трёх пунктов: эскизы, плитка, отключить. На каком-то из пунктов может стоять галка.
Задача вроде несложная, но документации из macroapi_manual.ru.chm оказалось недостаточно для такого простого действия.
Попытался реализовать и даже заработало, но выглядит коряво и наверняка можно улучшить:
Столкнулся с такими трудностями:
1. В документации было про menu.ItemStatus([Pos]) для узнавания, есть ли галка у пункта меню под номером Pos, но на деле никакого menu нет. Вместо этого слова строчки 8-9.
2. У списка (list) никакого ItemStatus() нет, зато у элемента списка (list[ i ]) есть .Text - жаль, не нужен. Перепробовал Checked/Status/Selected - таких нет. Оказалось есть .Flags, которых нет в macroapi_manual.ru.chm. В этих .Flags младшие 16 бит нули, а в 17 и 18 есть полезная информация (строки 10-11).
3. Согласно macroapi_manual.ru.chm выставить в списке текущим элемент по номеру (как и 10 лет назад) не представляется возможным. Поэтому нужно в цикле нажимать Down несколько раз (строки 20-21). Или можно уже?
Перемещение по списку на примере ConEmu Panel Views
-
- Posts: 106
- Joined: Sun 23 Oct, 2005 10:02
- Location: Томск
- Has thanked: 1 time
- Contact:
Перемещение по списку на примере ConEmu Panel Views
Last edited by Alexey Lubkin on Wed 04 Oct, 2017 23:44, edited 1 time in total.
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Перемещение по списку на примере ConEmu Panel Views
ConEmu у меня нет, поэтому данный ответ будет "теоретическим".
Вы всё ссылаетесь на macroapi_manual.ru.chm, в то время как половина вашего кода использует API из luafar_manual.chm. Эти документы описывают две разные библиотеки. Пользоваться можно обеими в одном скрипте, но нужно осознавать, которой пользуешься в данном месте кода, и смотреть в соответствующей документации.
Вы всё ссылаетесь на macroapi_manual.ru.chm, в то время как половина вашего кода использует API из luafar_manual.chm. Эти документы описывают две разные библиотеки. Пользоваться можно обеими в одном скрипте, но нужно осознавать, которой пользуешься в данном месте кода, и смотреть в соответствующей документации.
menu нет, есть Menu.Alexey Lubkin wrote: ↑Wed 04 Oct, 2017 23:371. В документации было про menu.ItemStatus([Pos]) для узнавания, есть ли галка у пункта меню под номером Pos, но на деле никакого menu нет.
Потому что Menu.ItemStatus - это функция из macro-API, а list[n] - это элемент списка, полученного посредством LuaFAR-API. Смешались в кучу кони, люди.
Попробуйте через hDlg:send("DM_LISTSETCURPOS").Alexey Lubkin wrote: ↑Wed 04 Oct, 2017 23:373. Согласно macroapi_manual.ru.chm выставить в списке текущим элемент по номеру (как и 10 лет назад) не представляется возможным.
Last edited by Shmuel on Thu 05 Oct, 2017 01:13, edited 3 times in total.
-
- Posts: 106
- Joined: Sun 23 Oct, 2005 10:02
- Location: Томск
- Has thanked: 1 time
- Contact:
Перемещение по списку на примере ConEmu Panel Views
С Menu.ItemStatus заработало. Сбили с толку маленькие буквы в документации:
Странный этот LUA:
Привычные и логичные and и or тут непривычные и нелогичные:
0 and 0 ==> 0
0 and 1 ==> 1
0 and 2 ==> 2
0 and 3 ==> 3
1 and 0 ==> 0
1 and 1 ==> 1
1 and 2 ==> 2
1 and 3 ==> 3
Получился такой код:
Привычные и логичные and и or тут непривычные и нелогичные:
0 and 0 ==> 0
0 and 1 ==> 1
0 and 2 ==> 2
0 and 3 ==> 3
1 and 0 ==> 0
1 and 1 ==> 1
1 and 2 ==> 2
1 and 3 ==> 3
Last edited by Alexey Lubkin on Thu 05 Oct, 2017 11:48, edited 2 times in total.
- John Doe
- Бюрократ
- Posts: 13851
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Перемещение по списку на примере ConEmu Panel Views
В комплекте Conemu есть скрипт ConEmu.Thumbnails.lua (ConEmu: Switch Thumbnails/Tiles view on active panel).
Подозреваю он должен быть в тему.
Переключение осуществляется нарямую (Plugin.Call), без хождений по менюшкам.
Подозреваю он должен быть в тему.
Переключение осуществляется нарямую (Plugin.Call), без хождений по менюшкам.