-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmenus.text
303 lines (202 loc) · 11.1 KB
/
menus.text
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
Свойства и функции для работы с меню и списками
===============================================
К *меню* относятся следующие [области]: *прочие меню* (`Menu`), *основное меню* (`MainMenu`),
*меню пользователя* (`UserMenu`), *меню выбора диска* (`Disks`).
Под *списками* понимается: *список автодополнения* (`Shell`-/`DialogAutoCompletion`), и различные
открытые списки в диалогах (`Dialog`) - *List box* / *Combo box* / *History*.
Далее в тексте "*меню*" и "*списки*" не разделяются, и упоминаются под общим названием "*меню*".
Свойства
--------
### Все меню
`Menu.Id`
: `string`
: строковое представление идентификатора текущего меню в формате
`"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"` (см. [GUID объектов])
`Menu.Value`
: `string`
: содержимое текущего пункта меню (см. также `Menu.GetValue`)
### Меню выбора диска
`Drv.ShowMode`
: `number`
: информация, отображаемая в *меню выбора дисков*; набор битовых флагов:
`0x00000001`
: тип дисков
`0x00000002`
: сетевые имена (и пути, ассоциированные с SUBST-дисками)
`0x00000004`
: метки дисков
`0x00000008`
: тип файловой системы
`0x00000010`
: общее и свободное место на дисках
`0x00000100`
: общее и свободное место отображается в виде десятичной дроби
`0x00000020`
: параметры сменных носителей
`0x00000040`
: подключаемые модули (плагины)
`0x00000080`
: параметры оптических дисков
`0x00000200`
: параметры сетевых дисков
`Drv.ShowPos`
: `number`
: для какой панели вызвано меню выбора диска:
`1` - для левой (~Alt+F1~),
`2` - для правой (~Alt+F2~).
Функции
-------
:::functions
`Pos=Object.CheckHotkey(S[,StartPos])`
: Функция позволяет проверить и получить позицию элемента, для которого назначена
горячая клавиша `S`.
Если `S` - пустая строка, то функция вернёт позицию элемента, для которого
горячие клавиши не назначены.
Если не задать `StartPos`, то поиск осуществляется с начала.
Работает как в меню, так и в диалогах.
Если текущий элемент диалога - открытый список, то функция работает не с диалогом,
а с этим списком.
Возвращает позицию найденного элемента.
`0` - ничего не найдено,
`-1` - функция вызвана не из *меню*/*диалога*/*списка*.
Например:
В меню вызова плагинов (~F11~) плагину *S&R* назначена горячая клавиша `7`.
Следующая последовательность макрокоманд для редактора вызовет плагин (если хоткей назначен)
или стандартный диалог поиска (если хоткей не назначен):
~~~lua
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;
}
~~~
`S=Object.GetHotkey([Pos])`
: Возвращает горячую клавишу `S` для пункта меню с номером `Pos`.
Если `Pos` не указан, или равен `0` - подразумевается текущий пункт.
Если горячая клавиша для пункта меню не задана, то возвращается пустая строка (`""`).
В случае ошибки (не меню; нет хоткея; `Pos` больше чем количество пунктов меню) также
возвращается пустая строка.
`N=Menu.Filter([Action[,Mode]])`
: Выполняет операции фильтрации (~RAlt~/~Ctrl+Alt+F~).
`Action`:
`0`
: включение фильтра
`Mode`:
`-1`
: (по умолчанию) вернуть `1` если фильтр уже включен,
`0` - фильтр выключен
`0`
: выключить фильтр
`1`
: включить фильтр, если фильтр уже включен - ничего не делает
`1`
: фиксация текста фильтра (~Ctrl+Alt+L~)
`Mode`:
`-1`
: (по умолчанию) вернуть `1` если текст фильтра зафиксирован,
`0` - фильтр можно менять с клавиатуры
`0`
: отменить фиксацию фильтра
`1`
: зафиксировать фильтр
`2`
: вернуть `1` если фильтр включен и строка фильтра не пуста
`3`
: вернуть количество отфильтрованных (невидимых) строк
`4`
: (по умолчанию) подправить высоту списка под количество элементов
Если фильтрация недоступна (не *меню*; не *список*) возвращает `-1`.
Если код возврата специально не оговорен, в случае успеха возвращает `1`, в случае ошибки `0`.
`S=Menu.FilterStr([Action[,S]])`
: Выполняет операции со строкой фильтра (~Ctrl+Alt+F~).
`Action`:
`0`
: (по умолчанию) вернуть текущую строку, если фильтр включен
`1`
: установить (заменить) в фильтре строку `S`
Если фильтр не был включен - включает его, режим фиксации не трогается, но игнорируется.
Возвращает предыдущее значение строки фильтра
`S=Menu.GetValue([Pos])`
: Возвращает текст пункта меню с номером `Pos`.
Если текущий "объект" не *меню* или позиция `Pos` не валидна (меньше `0`
или больше количества пунктов в меню), то возвращается пустая строка.
Если `Pos` не указан или равен `0`, то действие аналогично применению `Menu.Value`.
Позиция меню не меняется.
`b=Menu.ItemStatus([Pos])`
: Возвращает в младшем слове набор битовых флагов - состояние пункта меню с номером `Pos`
(текущая позиция - `Pos=0` или не указан):
Флаги:
`0x00000001`
: Признак активности пункта меню. Только один пункт может быть активным.
`0x00000002`
: Признак отмеченного пункта меню. Перед текстом будет отображаться метка выбора.
`0x00000004`
: Пункт меню отображается как разделитель.
`0x00000008`
: Пункт меню недоступен
`0x00000010`
: Если флаг установлен, то пункт меню доступен в навигации, но не доступен для выбора.
`0x00000020`
: Если флаг установлен, то пункт меню не выводится на экран.
В старшем слове - код символа пометки (`U+XXXX`).
* Если выставлен флаг `0x00000002` и старшее слово *равно* `0`, то
Far использует символ пометки `√` (`U+221A`).
* Если выставлен флаг `0x00000002` и старшее слово *не равно* `0`, то
Far использует символ пометки из старшего слова.
~~~lua
if band(Menu.ItemStatus(),0x00000002) then
mf.msgbox("Selected", unicode.utf8.char(rshift(Menu.ItemStatus(),16)))
else
mf.msgbox("Not Selected")
end
~~~
Функция работает со всеми пунктами меню, в том числе с теми, которые в данный момент
не отображаются (скрытые пункты учитываются в позиции).
Если текущий "объект" не *меню* или позиция `Pos` невалидна (меньше `0` или
больше количества пунктов в меню), то функция возвращает значение `-1` (все биты установлены).
`Pos=Menu.Select(S[,Mode[,Dir]])`
: В меню позиционирует курсор на первый пункт, содержащий подстроку `S`.
Поиск регистронезависим.
Если такого пункта нет, то ничего не делает.
Поиск подстроки ведётся в зависимости от указанного режима `Mode`:
`0`
: полное совпадение
`1`
: совпадение с началом строки
`2`
: совпадение с концом строки
`3`
: присутствие подстроки `S` в пункте меню
Если параметр `Mode` не указан, подразумевается полное совпадение.
Параметр `Dir` задаёт направление поиска:
`0`
: от начала в конец списка пунктов меню
`1`
: от текущей позиции в начало
`2`
: от текущей позиции в конец списка
Возвращает позицию пункта меню (если найден),
`0` - ошибка при позиционировании (нет пункта или пункт задисаблен),
`-1` - функция вызвана не для меню.
~~~lua
Keys("F11")
if Menu.Select("Advanced compare",0)>0 then
Keys("Enter")
end
~~~
:::
### Замечания
Пункты меню нумеруются, начиная с `1`.
В нумерацию также включаются разделители и заблокированные пункты меню.
- - -
Смотрите также:
[Примеры](examples.md)
[GUID объектов]: https://api.farmanager.com/ru/defs/guid.html
[области]: