View Issue Details

IDProjectCategoryView StatusLast Update
0003134Wishes.PluginsLuaMacro / Macro Browserpublic2016-09-12 18:25
ReporterJouriM Assigned To 
PrioritynormalSeverityminorReproducibilityalways
Status newResolutionopen 
Product Version3.0 
Summary0003134: Скорректировать и расширить функционал far.Menu()
DescriptionПредлагаю внести следующие изменения в поведение вунции реализующей far.Menu()
Описанные изменения реализуются приложенным патчем файла plugins\luamacro\luafar\service.c

   MenuItems
   * menu items scanned until first non-table item (no more errors if menu items table contains enumerable non-items)

   BreakKeys
   + Case sensitiveness of keys is removed. Now "Left", "LEFT" or even "lEfT" are the same key.
     NOTE: If you specify single char it can be specified as lower or upper case but will break menu only by pressing just char itself
   + Added all symbols: "`~@#$%^&*()-_=+\|{[}];:'",<.>/?"
     NOTE: If symbol need shift to be pressed to enter in text its need to press it to break menu too
           If '[' is set as break you need to press '[' to break
           If '{' is set as break you need to press Shift+'[' to break
   + Added set []. For every char inside [] separate break item will be generated
     NOTE: Chars are case sensitive! 'a' != 'A', you need to press Shift to break with 'A'
     NOTE: If char need shift to be pressed to enter it in text, the shift must be pressed in menu too ([ and { is differ by shift)
     NOTE: Set only can contain characters! (it impossible to add keys like arows or Ctrl|Shift|Alt+Keys)
   + Removed numpad and arrows difference. Now "Left" will break on arrow left and numpad4
     NOTE: If you need to differ numpad keys use NUMPADX or NUMX keys
   * Support for Right control and alt modifiers as RC[trl] and RA[lt] (left will be used only if right not found in key string)
   + On return by BreakKey in break item table the pair "KeyNum"=<number> will be added, where <number> is number
     of character is used to break menu (usefull if several break keys is set in single item)
     NOTE: Keynum is added allways, it allways equals 1 for single-key items
   + Added additional key names:
      BS (as backspace), BSPACE (as backspace), DEL (as DELETE), ENTER (as RETURN), INS (as INSERT), NUM0, NUM1, NUM2,
      NUM3, NUM4, NUM5, NUM6, NUM7, NUM8, NUM9, PGDN (as NEXT), PGUP (as PRIOR)
------------------
   MenuItems
   * Элементы меню сканируются до первого элемента не таблицы (не будет больше ошибок при хранении в этой же таблице другой информации)

   BreakKeys
   + Удалена разница регистра кнопок. Теперь "Left", "LEFT" или даже "lEfT" одна и та же кнопка.
     NOTE: Если указан одиночный символ, то он может быть как в верхнем так и в нижнем регистре, но прерывать меню будет нажатый без модификаторов
   + Добавлены символы: "`~@#$%^&*()-_=+\|{[}];:'",<.>/?"
     NOTE: Если символ требует нажатия shift для ввода его в редакторе, то его так же нужно будет нажать и для прерывания меню.
           Если '[' установлен как прерыватель, то нажать надо будет '['
           Если '{' установлен как прерыватель, то нажать надо будет Shift+'['
   + Добавлена возможность указывать наборы символов []. Прерывать меню будет любой символ внутри []
     NOTE: Символы чувствительны к реестру! 'a' != 'A', нужно будет нажать Shift чтобы прервать меню символом 'A'
     NOTE: Если символ требует нажатия shift для ввода его в редакторе, то его так же нужно будет нажать и для прерывания меню ([ и { различаются нажатием shift)
     NOTE: Набор может содержать ТОЛЬКО символы! (невозможно указат, к примеру, стрелки или сочетания Ctrl|Shift|Alt+Keys)
   + Удалена разница между стралками и расширенной клавиатурой. Теперь при указании "Left" меню будет прервано как стрелкой влево так и кнопкой numpad4
     NOTE: Если нужно различное поведение, то нужно использовать обозначения расширенных кнопок NUMPADX или NUMX
   * Поддержка правых control и alt с помощью RC[trl] и RA[lt] (левый будет использоваться только если в модификаторах явно не указан правый)
   + При возвращении из функции по прерыванию кнопкой в элемент таблицы прерывающих кнопок, для сработавшего элемента будет добавлена пара "KeyNum"=<номер>, где <номер> - это номер символа, которым фактически прервано меню (полезно, если указано несколько кнопок прерывателей в одном элементе)
     NOTE: Пара "KeyNum" добавляется всегда, для одиночных кнопок значение равно единице
   + Добавлены дополнительные кнопки:
      BS (как backspace), BSPACE (как backspace), DEL (как DELETE), ENTER (как RETURN), INS (как INSERT), NUM0, NUM1, NUM2, NUM3, NUM4, NUM5, NUM6, NUM7, NUM8, NUM9, PGDN (as NEXT), PGUP (as PRIOR)
TagsNo tags attached.

Activities

JouriM

2015-12-15 08:47

reporter  

service.c.zip (5,674 bytes)

shmuel

2015-12-15 09:24

developer   bugnote:0014129

Буду смотреть по мере наличия времени. Спасибо.

shmuel

2015-12-22 14:24

developer   bugnote:0014155

Элементы меню сканируются до первого элемента не таблицы (не будет больше ошибок при хранении в этой же таблице другой информации)

JouriM
Если нужно хранить в таблице другую информацию, можно ведь использовать нечисловой ключ, например:
items = { {text="apple"}, {text="cherry"}, weight=1.5 }
Что, собственно, мы выигрываем предложенным изменением (я лично в упор не вижу)?

JouriM

2015-12-22 14:36

reporter   bugnote:0014156

Это если создавать одно меню
Я на это нарвался, когда пытался сдлать "класс" который имеет clear() и add(), где перед показом делаю menu[count]=nil
При втором вызове с меньшим числом пунктов имею ошибку т.к. размер таблицы по # не изменился

shmuel

2015-12-22 15:12

developer   bugnote:0014157

Принудительное окончание массива каким-то элементом-не таблицей выглядит частным случаем, который решает узкую и специфическую задачу "обрезания хвостовых элементов меню". Уж если расширять far.Menu, то не таким способом. Можно, например, ввести поле __count и/или поля __start и __end.

Можно много чего ещё сделать. Но ведь всё это можно сделать и на Lua.
LuaFAR - это в основном оболочка над API плагинов Фара, а не конструктор.

Я наверняка кое-что позаимствую из ваших предложений. Что именно - пока не решил.

JouriM

2015-12-24 03:02

reporter   bugnote:0014159

Да, блин весь ФАР можно написать на ЛУА и он даже при этом станет не хуже, и чего?
О чем обсуждение-то?
О десятке символов в сорсе, изменение которых никак не повлияет ни на кого, но чуть облегчит жизнь для 0.01% пользователей?
Пусть даже 0.0001
Даж не знаю что сказать...
Разумеется, делай что хочешь
Или не делай
Мне один фиг придется на форках сидеть и этот будет не самым большим и важным, так что мне, в сущности, все равно.

JohnDoe

2016-07-17 16:55

updater   bugnote:0014667

Last edited: 2016-09-12 18:25

С кнопками в BreakKeys имхо не особо хорошо, т.к. предлагается какой-то новый стандарт.
А ведь есть привычные фаровские названия клавиш, которые очень просто внедрить, ведь есть FarNameToInputRecord (правда есть подводный камень, с шифтом).

Возможность указывать несколько клавиш полезна, но можно и без классов [], а через пробел.

Update: 0003303

JohnDoe

2016-07-17 17:09

updater   bugnote:0014668

Что касается различения правых и левых модификаторов, то насколько я могу судить, то ничего не выйдет пока сам фар их не различает http://sourceforge.net/p/farmanager/code/HEAD/tree/trunk/unicode_far/plugapi.cpp#l967

Issue History

Date Modified Username Field Change
2015-12-15 08:47 JouriM New Issue
2015-12-15 08:47 JouriM File Added: service.c.zip
2015-12-15 09:24 shmuel Note Added: 0014129
2015-12-22 14:24 shmuel Note Added: 0014155
2015-12-22 14:36 JouriM Note Added: 0014156
2015-12-22 15:12 shmuel Note Added: 0014157
2015-12-24 03:02 JouriM Note Added: 0014159
2016-07-17 16:55 JohnDoe Note Added: 0014667
2016-07-17 17:09 JohnDoe Note Added: 0014668
2016-09-12 18:25 JohnDoe Note Edited: 0014667