Я правильно понимаю, что стрелки, бакспейс и просто буквы, переданные в таблицу BreakKeys работать не будут?
Это имеет какое-то логическое обоснование или просто не доделано?
local function _p(f,...) return string.format(f,...) end
local function iif(e,v1,v2) if e ~= nil and e == true then return v1; else return v2; end end
local function _m(...) v,n = far.Show("{TERMINATE SCRIPT}", ...) if v ~= nil and n == 1 then _FAKECALL() end end
local types = { [0]="Label"; [3]="Border"; [4]="Edit"; [5]="EditPwd", [ 6]="EditFix",[ 7]="Button",[ 8]="CheckBox",[ 9]="Radio",[ 10]="Combo",[ 11]="List",[255]="Custom" ,
str = function(ts,t) local v=ts[t]; return iif(v~=nil,_p("%-8s",v),_p("Unk: \n%-3d\n",t)) end
}
local m = { count=1,
add = function(this,t,...) this[ this.count ] = { idx = this.count, text = string.format(t,...) }; this.count = this.count+1; return this.count-1 end,
addsep = function(this,t) this[ this.count ] = { idx = this.count, text = t, separator=true }; this.count = this.count+1; return this.count-1 end,
show = function(this,t,b) if this.count > 1 then this[this.count]=nil; return far.Menu( iif(t,t,{Title="Menu"}), this, b ) else return nil,nil; end end,
foreach = function(this,cb) for n=1,this.count-1 do if cb(this,this[n]) == false then return end end end,
clear = function(this) this[1] = nil; this.count = 1; end,
_=0}
Macro {
area="Shell Editor Viewer Other Menu Dialog MainMenu UserMenu Disks"; key="CtrlShift'"; description="TEST"; flags="";
action = function()
--while 1 do
m:clear()
m:add( " Id: \n%s\n",Dlg.Id )
m:add( "Owner: \n%s\n",Dlg.Owner )
m:add( "Count: \n%d\n",Dlg.ItemCount )
m:addsep( "Items" )
for n=1,Dlg.ItemCount do
m:add( "%3d¦%s¦%s", n, types:str(Dlg.GetValue(n,1)), Dlg.GetValue(n,10) )
end
local br = {
{ BreakKey="F" },
{ BreakKey="Left" },
{ BreakKey="[aAg:;G^_.*]" },
{ BreakKey="Right" },
{ BreakKey="BS" },
{ BreakKey="Back" },
{ BreakKey="&" },
{ BreakKey="Ctrl+F" },
}
local it,num = m:show( {Title="Dialog info"}, br )
far.Show( it,num,it.BreakKey,it.Key )
--end
end
}
Из которого вызываются только F и Ctrl+F. Как бакспейс обозначить я вообще не нашел.
Символы же не жрутся по определению.
ПС: На "{ BreakKey="[aAg:;G^_.*]" }," внимания не обращай - это я себе расширение сделал, чтобы не писать миллион пунктов если надо обрабатывать кучу букв и символов.
Items: table (array of menu items)
a menu item is a table;
fields of a menu item (every field is optional):
text: string
checked: boolean, or string
separator: boolean
disable: boolean
grayed: boolean
hidden: boolean
selected: boolean
AccelKey: table tFarKey
BreakKeys: table (array of break key items)
a break key item is a table;
fields of a break key item:
BreakKey: string (see NOTE 1)
Returns:
Item: table Either the selected element of Items array (if Enter was pressed)
or an element of BreakKeys array (if a corresponding break key was
pressed).
nil The menu was cancelled by the user.
Position: integer Position of the selected item at the moment of closing the menu.
nil The menu was cancelled by the user.
NOTE 1
Properties.SelectIndex=N is equivalent to Items[N].selected=true.
NOTE 2
Example of constructing a BreakKey string:
BreakKey="AS+DELETE", where:
AS - stands for AltShift
+ - separates key modifiers from key
DELETE - virtual key VK_DELETE (prefix VK_ is removed).
NOTE 3
The first return value (Item) can be used by the program for performing
the item-specific action. To do so, the program can put some specific field(s)
into each element of Items and BreakKeys tables. For example, such fields
can be "action", "filename", etc.
Не вижу там ответов ни на один мой вопрос.
Ткни носом плз.
2. Я не знаю как ты, а я сорсы смотрю
Был неправ.
Действительно нужно все указывать в аперкейсе, тогда работает.
Спасибо за наводку, убрал такую зависимость в своем патче.
3. Это действительно работает, спасибо.
К сожалению, это небольшой и побочный кусок того что мне нужно.
4. Этого я вообще не понял.
Зачем мне неполная и неудобная выжимка из winuser.h?
ПС: Я переделал обработку меню так:
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 if 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)
Sample:
local br = {
--[[1]]{ BreakKey="Left" },
--[[2]]{ BreakKey="[aAg:;G^_.*]" }, -- must break on every char in group, Case sensitive!
--[[3]]{ BreakKey="Right" },
--[[4]]{ BreakKey="Delete" },
--[[5]]{ BreakKey="H" }, -- must break on just 'h', not shift+h
--[[6]]{ BreakKey="Ins" },
--[[7]]{ BreakKey="Del" },
--[[8]]{ BreakKey="C+Left" },
--[[9]]{ BreakKey="S+Ins" },
}
local items{ {text="Item1"},{text="Item2"} }
local it,num = far.Menu( {Title="Dialog info"}, items, br )
if it ~= nil then
far.Show( it,num,it.BreakKey,it.KeyNum )
end
Особо тестировать некогда т.к. работы много, но вроде работает.
Если кому надо - пишите.
не работают некоторые кнопки в BreakKeys
Posted: Mon 14 Dec, 2015 21:33
by Shmuel
Прежде всего, успокойтесь. Что у вас конкретно не работает, какие клавиши? Укажите, и я приведу вам рабочий код, чтобы закончить эту дискуссию. Насчёт того, что я не читаю сорсы - я эти сорсы написал.
не работают некоторые кнопки в BreakKeys
Posted: Mon 14 Dec, 2015 21:48
by Shmuel
JouriM wrote: что мне, например, говорит о том что кейс в котором указан брейк-кей абсолютно монопенисуален.
Вот это lua:far.Menu({},{{text="foo"}}, {{BreakKey="LEFT"}}) работает.
А вот это lua:far.Menu({},{{text="foo"}}, {{BreakKey="left"}}) НЕ работает.
И не надо в сорсы смотреть, достаточно попробовать.
не работают некоторые кнопки в BreakKeys
Posted: Mon 14 Dec, 2015 22:02
by JouriM
Уже поправил пост
Извиняюсь за скоропалительные выводы
Просто сижу-то уже на патченной версии.
ПС: Да я спокоен как танк.
Давно.
Еще после первого инсульта
ППС: Эти мои исправления, хотяб в теории, будут кому-то нужны?
Если да, то в какой форме и куда их выдавать?
не работают некоторые кнопки в BreakKeys
Posted: Mon 14 Dec, 2015 22:12
by Shmuel
JouriM wrote: ППС: Эти мои исправления, хотяб в теории, будут кому-то нужны?
Если да, то в какой форме и куда их выдавать?
Общее правило - на багтрекер (мантис), с приложенным патчем (если есть).
Конкретно, по поводу LuaFAR, - как уже не раз говорилось на этом форуме, LuaFAR является тонкой оболочкой над Far API. Это сделано сознательно. Более "толстые" оболочки можно делать уже на Lua. Тем не менее, вы можете поместить свои изменения на мантис в раздел Wishes, а там видно будет.
не работают некоторые кнопки в BreakKeys
Posted: Mon 14 Dec, 2015 23:09
by JouriM
Shmuel wrote: Общее правило - на багтрекер (мантис), с приложенным патчем (если есть).
Куда конкретно идти, что конкретно делать? Это где-то писано?
Слово "мантис" мне вообще ничего не говорит.
Shmuel wrote: Конкретно, по поводу LuaFAR, - как уже не раз говорилось на этом форуме, LuaFAR является тонкой оболочкой над Far API.
Это все правильно.
Только, на мой взгляд, реализовывать базовое поведение все же надо именно в "тонкой оболочке".
То что я сделал в ней можно, скорее всего, реализовать и на ЛУА но это будет крайне монстрообразно.
А в случае с той же подсветкой текста в меню - и вовсе невозможно.
не работают некоторые кнопки в BreakKeys
Posted: Mon 14 Dec, 2015 23:16
by Shmuel
JouriM wrote: Куда конкретно идти, что конкретно делать?
Ссылка Bugs вверху на любой странице форума. Возможно, надо будет там зарегистрироваться.
JouriM wrote: Только, на мой взгляд, реализовывать базовое поведение все же надо именно в "тонкой оболочке"
То что я сделал в ней можно, скорее всего, реализовать и на ЛУА но это будет крайне монстрообразно.
Обычно реализация оболочки на Lua - проще, чем на Си, и требует меньше кода.
JouriM wrote: А в случае с той же подсветкой текста в меню - и вовсе невозможно.
Ещё как возможно. Посмотрите например в плагине LuaFAR Search окно "Show all" при поиске в редакторе.
не работают некоторые кнопки в BreakKeys
Posted: Tue 15 Dec, 2015 00:29
by JouriM
Shmuel wrote: Ссылка Bugs вверху на любой странице форума. Возможно, надо будет там зарегистрироваться
Зарегался. Там можно только баг описать. Чего делать-то, описывать как баг для LuaMacro?
В каком виде прикладывать изменения? Если диф, то с какими ключами?
Shmuel wrote: Ещё как возможно. Посмотрите например в плагине LuaFAR Search окно "Show all" при поиске в редакторе
Плагин крут, я тут же снес неадекватный ReSearch.
Но по теме я не понял. Куда именно смотреть подскажи. То что можно делать овнер-дравные элементы в диалогах на с я прекрасно знаю и даже пользовался пару раз. К скриптовым менюшкам это как относится?
не работают некоторые кнопки в BreakKeys
Posted: Tue 15 Dec, 2015 08:00
by Shmuel
JouriM wrote: Там можно только баг описать
Перед тем, как кликнуть на "Report Issue", нужно выбрать из выпадающего списка "Projects" подходящий проект. В вашем случае это "Wishes.Plugins". На странице репорта есть "Category" - выберите "LuaMacro / Macro Browser". Опишите там словесно суть ваших предложений и приложите файл диффа. Обычно используется ключ -u
JouriM wrote: Куда именно смотреть подскажи
Открыть в редакторе диалог поиска плагина, набрать фразу поиска, нажать Alt4 (или на кнопку "Show All").
JouriM wrote: То что можно делать овнер-дравные элементы в диалогах на с я прекрасно знаю и даже пользовался пару раз
К скриптовым менюшкам это как относится?
Нужно положить соответствующий модуль (в данном случае custommenu.lua) на package.path, и любой скрипт сможет им пользоваться.
не работают некоторые кнопки в BreakKeys
Posted: Tue 15 Dec, 2015 09:21
by JouriM
Shmuel wrote: Обычно используется ключ -u
Только с ним дифит вообще все т.к. у меня табы экспандятся. Выбрал "-u -w -B". Спасибо за консультации, попробую.
Shmuel wrote: набрать фразу поиска, нажать Alt4
И я вижу самописный диалог, тогда как речь шла о меню. Что я упускаю?
Ну, пусть, даже найдется скрипт, который эмулирует меню диалогом (если об этом речь). Но на принцип же это не повлияет.
Меню - это очень "дешовый" способ визуализации в макросах и он есть из коробки. Я считаю что для писания микроскриптиков, чем занимаются 99% писателей, идти куда-то, вытаскивать какие-то аддоны, их ставить и использовать - нереально.
Ладно хоть меню-то нашли и вообще разобрались как эти самые скрипты писать. Какой-то несложный функционал нужно совать именно в базовое меню. Яж не предлагаю сделать в нем инкрементальный сеч, к примеру (что тоже крайне несложно и нужно в львиной доле менюшек). Я предлагаю добавить\модифицировать уже существующий функционал.
не работают некоторые кнопки в BreakKeys
Posted: Tue 15 Dec, 2015 10:36
by Shmuel
JouriM wrote: Что это за файл?
Лежит у меня на гитхабе. Поиском можно найти.
JouriM wrote: Я предлагаю добавить\модифицировать уже существующий функционал
Никто ж вроде не спорит. Делайте виш на мантисе с приложенным патчем, а там видно будет.