У меня никуда курсор не двигается
странно... может преференсы какие-то у меня криво настроены?
перерыл уже всё что можно (
У меня никуда курсор не двигается
Я заметил, что сочетания кнопок именно с кнопкой CTRL тянут за собой курсор..и у меня тоже начал прыгать курсор к стрейч маркеру.
Я проверял сегодня на всех четырех "ctrl, shift, alt, win" в разных комбинациях и без разницы какая комбинация клавиш, любая комбинация кнопок тянут курсор за собой. Тут выход - либо назначать не через модифаер, либо писать Justin или schwa.Я заметил, что сочетания кнопок с кнопкой CTRL тянут за собой курсор..
К сожалению на английском я такое наверное не смогу описать.) Что-то полегче- да)
Завтра напишу на форум.@vax, Назначай скрипты не через Mouse modifiers, а просто через любой шоткат.
Я только что добавил через Mouse modifiers, как у тебя на скрине, ради эксперимента и у меня тоже начал прыгать курсор к стрейч маркеру.
Тут что то с Mouse modifiers не так, потому как в скрипте нет не одной функции связанной как то с эдит курсором.
Это уже надо писать на оф.форуме, что бы они этот баг исправляли, к тому же ты говоришь что это не только с этими скриптами так, но и со старыми и с квантайзом, значит это сто процентов что то не так с модифаерами.
Custom: Split cut toggle arm
Action: Toggle arm of next action
Item: Split item under mouse cursor
Этот способ также перемещает курсор к стрейч маркеру, да и переключать его постоянно неудобно.раньше можно было так делать только с кнопками на тулбарах, но в какой-то из версий можно добавлять арм в любой кастом.
Например, такой экшн позволит левой клавишей резать айтемы, а после повторного нажатия это будет снова обычный курсор мыши.
function main();
-----
-- SCRIPT / Сюда вставляешь содержимое всего скрипта
-----
end;
local shortCut = 21 -- ctrl + alt + click
local clickDown;
local stopDoubleScr,ActiveDoubleScr;
local function loop();
----- stop Double Script -------
if not ActiveDoubleScr then;
stopDoubleScr = (tonumber(reaper.GetExtState("VaxCtrlAltClick","stopDoubleScr"))or 0)+1;
reaper.SetExtState("VaxCtrlAltClick","stopDoubleScr",stopDoubleScr,false);
ActiveDoubleScr = true;
end;
local stopDoubleScr2 = tonumber(reaper.GetExtState("VaxCtrlAltClick","stopDoubleScr"));
if stopDoubleScr2 > stopDoubleScr then return end;
--------------------------------
local GetState = reaper.JS_Mouse_GetState(127);
if GetState == shortCut then;
clickDown = true;
end;
if clickDown and GetState == shortCut-1 then;
main();
clickDown = nil;
end;
if GetState ~= shortCut and GetState ~= shortCut-1 then;
clickDown = nil;
end;
reaper.defer(loop);
end;
loop();
Стреч маркеру? Мой примерный экшн не имеет ничего общего со стреч маркерами.Этот способ также перемещает курсор к стрейч маркеру
Твой примерный кастом не имеет ничего общего со стретч маркерами — но судя из всей беседы, ты посоветовал Андрею экшенМой примерный экшн не имеет ничего общего со стреч маркерами.
2. Вот в этот код вставляешь содержимое скрипта, в коде написано куда.
есть отдельные экшны для включения/выключения этого режима, может они помогут.ты посоветовал Андрею экшен
"Action: Toggle arm of next action"
Что получилось ?
Что получилось ?
Да, верно.я через global startup action подцепил его, верно?
Не понял, поподробнее пожалуйста.PS а как изменить для скрипта опции старта (Terminate и тд), если уже один раз их задал?
Благодарю!!! )PPS Задонатил ещё чуток. Спасибо! )
Не понял, поподробнее пожалуйста.
@vax
Пост #399 обновил (код), обнови у себя в скрипте. А при запросе поставь галку и New .Посмотреть вложение 168979
В прошлый раз я это не учел, и сейчас он у тебя работает неадекватно скорей всего, либо через раз, если нажал Terminate ..., либо как из пулемета ставит маркеры, если нажал New ...
Плохо что то скопировал или при вставке что то зацепил. Обнови все поновой.после обновления скрипта вылетает ошибка
function main();
--------------------------------------------------------
local function no_undo() reaper.defer(function()end)end;
--------------------------------------------------------
local function GetPreviousGrid(time);
for i = 1,math.huge do;
local val = reaper.SnapToGrid(0,time);
if val <= time then return val end;
time = time-0.001;
end;
end;
local function GetNextGrid(time);
for i = 1,math.huge do;
local val = reaper.SnapToGrid(0,time);
if val >= time then return val end;
time = time+0.001;
end;
end;
local x,y = reaper.GetMousePosition();
local item,take = reaper.GetItemFromPoint(x,y,false);
if not take or reaper.TakeIsMIDI(take)then no_undo() return end;
reaper.BR_GetMouseCursorContext();
local mousePos = reaper.BR_PositionAtMouseCursor(true);
local PreviousGrid = GetPreviousGrid(mousePos);
local NextGrid = GetNextGrid(mousePos);
local newPos;
if math.abs(mousePos-PreviousGrid ) < math.abs(mousePos-NextGrid)then;
newPos = PreviousGrid else newPos = NextGrid;
end;
local posIt = reaper.GetMediaItemInfo_Value(item,"D_POSITION");
local lenIt= reaper.GetMediaItemInfo_Value(item, "D_LENGTH");
local ratIt = reaper.GetMediaItemTakeInfo_Value(take,"D_PLAYRATE");
local sm_mar = reaper.BR_GetMouseCursorContext_StretchMarker();
--[[
if sm_mar < 0 then;
for i = 1, reaper.GetTakeNumStretchMarkers(take)do;
local retval, pos, srcpos = reaper.GetTakeStretchMarker(take,i-1);
if (pos/ratIt)+posIt == newPos then sm_mar = i-1 end;
end;
end;
--]]
reaper.Undo_BeginBlock();
if sm_mar >= 0 then;
reaper.DeleteTakeStretchMarkers(take,sm_mar);
reaper.Undo_EndBlock("Remove stretch marks under mouse cursor",-1);
else;
local idx = reaper.SetTakeStretchMarker(take,-1,(mousePos-posIt)*ratIt);
if idx == 0 then;
reaper.SetTakeStretchMarker(take,-1,0);
idx = idx + 1;
end;
if idx == reaper.GetTakeNumStretchMarkers(take)-1 then;
reaper.SetTakeStretchMarker(take,-1,lenIt*ratIt);
end;
reaper.SetTakeStretchMarker(take,idx,(newPos-posIt)*ratIt);
reaper.Undo_EndBlock("Add stretch marker under mouse cursor and snap to nearest grid",-1);
end;
reaper.UpdateArrange();
-----
end;
local shortCut = 21 -- ctrl + alt + click
local clickDown;
local stopDoubleScr,ActiveDoubleScr;
local function loop();
----- stop Double Script -------
if not ActiveDoubleScr then;
stopDoubleScr = (tonumber(reaper.GetExtState("VaxCtrlAltClick","stopDoubleScr"))or 0)+1;
reaper.SetExtState("VaxCtrlAltClick","stopDoubleScr",stopDoubleScr,false);
ActiveDoubleScr = true;
end;
local stopDoubleScr2 = tonumber(reaper.GetExtState("VaxCtrlAltClick","stopDoubleScr"));
if stopDoubleScr2 > stopDoubleScr then return end;
--------------------------------
local GetState = reaper.JS_Mouse_GetState(127);
if GetState == shortCut then;
clickDown = true;
end;
if clickDown and GetState == shortCut-1 then;
main();
clickDown = nil;
end;
if GetState ~= shortCut and GetState ~= shortCut-1 then;
clickDown = nil;
end;
reaper.defer(loop);
end;
local _,_,sectionID,cmdID,_,_,_ = reaper.get_action_context();
reaper.SetToggleCommandState(sectionID,cmdID,1);
reaper.RefreshToolbar(cmdID);
local action = reaper.GetMouseModifier( "MM_CTX_ITEM_CLK", 6, "" )
reaper.SetMouseModifier( "MM_CTX_ITEM_CLK", 6, "" )
reaper.SetExtState("VaxSaveModif","SaveModif",action,true);
loop();
local function Exit();
local action = reaper.GetExtState("VaxSaveModif","SaveModif");
reaper.SetMouseModifier("MM_CTX_ITEM_CLK",6,action);
reaper.SetToggleCommandState(sectionID,cmdID,0);
reaper.RefreshToolbar(cmdID);
end;
reaper.atexit(Exit);
Плохо что то скопировал или при вставке что то зацепил. Обнови все поновой.
Заметил за клавишей alt еще такой баг (хотя это может только у меня), хоть и отключили в модифаерах все и если кликнуть по маркеру с зажатым alt, то маркер удалится вне зависимости от настроек в модифаерах.
Так вот - если ты будешь удалять маркер этим же скриптом через клавиши alt+ctrl+click назначенные через способ из сообщения #399 , то будет происходить следующее - сначала не скрипт удалит маркер, а затем уже скрипт добавит по новой маркер, так что если у тебя такая же беда с альтом, то при удалении отпускай ctrl что б зажат был только альт.
А что бы alt+клик не удалял маркер я так и не смог сделать. пробовал в модифаерах отключать во всех разделах все что связано в альтом и это не помогло.
Он не не работает коректно, а так и задумывалось, как и просил.ещё момент, скрипт новый не работает корректно если выделено НЕСКОЛЬКО айтемов.
А не работает через этот способ потому что ты когда кликаешь по айтему, то с других айтемов выделение снимается, а под мышью один выделяется и в него уже добавляется маркер.чё-то не работает на несколько выделенных айтемов (
function main();
-----
-- SCRIPT / Сюда вставляешь содержимое всего скрипта
-----
end;
local Table;
local shortCut = 21 -- ctrl + alt + click
local clickDown;
local stopDoubleScr,ActiveDoubleScr;
local function loop();
----- stop Double Script -------
if not ActiveDoubleScr then;
stopDoubleScr = (tonumber(reaper.GetExtState("VaxCtrlAltClick","stopDoubleScr"))or 0)+1;
reaper.SetExtState("VaxCtrlAltClick","stopDoubleScr",stopDoubleScr,false);
ActiveDoubleScr = true;
end;
local stopDoubleScr2 = tonumber(reaper.GetExtState("VaxCtrlAltClick","stopDoubleScr"));
if stopDoubleScr2 > stopDoubleScr then return end;
--------------------------------
local GetState = reaper.JS_Mouse_GetState(127);
if GetState == shortCut then;
clickDown = true;
--reaper.PreventUIRefresh(1);
else;
if GetState&1 == 0 and not clickDown then;
Table = {};
local CountSelItem = reaper.CountSelectedMediaItems(0);
for i = 1,CountSelItem do
table.insert(Table,reaper.GetSelectedMediaItem(0,i-1));
end;
end;
end;
if clickDown and GetState == shortCut-1 then;
for i = 1,#Table do;
pcall(reaper.SetMediaItemSelected,Table[i],true);
end
main();
--reaper.PreventUIRefresh(-1);
clickDown = nil;
end;
if GetState ~= shortCut and GetState ~= shortCut-1 then;
clickDown = nil;
end;
reaper.defer(loop);
end;
reaper.defer(loop);