ReaScripts (скрипты для Reaper) - делимся (1 онлайн

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
@vax, Назначай скрипты не через Mouse modifiers, а просто через любой шоткат.
Я только что добавил через Mouse modifiers, как у тебя на скрине, ради эксперимента и у меня тоже начал прыгать курсор к стрейч маркеру.
Тут что то с Mouse modifiers не так, потому как в скрипте нет не одной функции связанной как то с эдит курсором.

Это уже надо писать на оф.форуме, что бы они этот баг исправляли, к тому же ты говоришь что это не только с этими скриптами так, но и со старыми и с квантайзом, значит это сто процентов что то не так с модифаерами.
 
Последнее редактирование:
  • Like
Реакции: vax

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
Я заметил, что сочетания кнопок с кнопкой CTRL тянут за собой курсор..
Я проверял сегодня на всех четырех "ctrl, shift, alt, win" в разных комбинациях и без разницы какая комбинация клавиш, любая комбинация кнопок тянут курсор за собой. Тут выход - либо назначать не через модифаер, либо писать Justin или schwa.
 
  • Like
Реакции: YuriOl

vax

Чукча-писатель
13 Ноя 2002
7.397
4.620
113
44
Kiev/UA
www.andivaxmastering.com
@vax, Назначай скрипты не через Mouse modifiers, а просто через любой шоткат.
Я только что добавил через Mouse modifiers, как у тебя на скрине, ради эксперимента и у меня тоже начал прыгать курсор к стрейч маркеру.
Тут что то с Mouse modifiers не так, потому как в скрипте нет не одной функции связанной как то с эдит курсором.

Это уже надо писать на оф.форуме, что бы они этот баг исправляли, к тому же ты говоришь что это не только с этими скриптами так, но и со старыми и с квантайзом, значит это сто процентов что то не так с модифаерами.
Завтра напишу на форум.

А можно назначить в экшенах хоткей + клик мыши?
 
  • Like
Реакции: Archie's и YuriOl

vitalker

Well-Known Member
8 Окт 2013
5.085
2.195
113
Гродно
@vax, раньше можно было так делать только с кнопками на тулбарах, но в какой-то из версий можно добавлять арм в любой кастом.
Например, такой экшн позволит левой клавишей резать айтемы, а после повторного нажатия это будет снова обычный курсор мыши.
Код:
Custom: Split cut toggle arm
  Action: Toggle arm of next action
  Item: Split item under mouse cursor
 

vax

Чукча-писатель
13 Ноя 2002
7.397
4.620
113
44
Kiev/UA
www.andivaxmastering.com
написал bug report. если повесить скрипт на хоткей - всё ок работает.
действительно странное что то с mouse modifiers при использовании ALT.
 
  • Like
Реакции: YuriOl и Archie's

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
раньше можно было так делать только с кнопками на тулбарах, но в какой-то из версий можно добавлять арм в любой кастом.
Например, такой экшн позволит левой клавишей резать айтемы, а после повторного нажатия это будет снова обычный курсор мыши.
Этот способ также перемещает курсор к стрейч маркеру, да и переключать его постоянно неудобно.

@vax, Придумал вот такой способ, можешь назначить так.
Сочетание клавиш делал отталкиваясь от твоего скрина "ctrl+alt+click"
1. ОБЯЗАТЕЛЬНО убираешь действие в моус модифаере, ставишь No action
1571307142745.png
2. Вот в этот код вставляешь содержимое скрипта, в коде написано куда.
3. Включаешь скрипт один раз и забываешь про него и он будет работать как моус модифаер,
Минус в том что при каждом запуске рипера надо постоянно запускать скрипт по новой, но как вариант можешь добавить его в авто загрузку и вообще о нем забыть.
Обновленная версия здесь пост #419
PHP:
    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();
P.S. Требуется расширение JS_reascript_API, если реапак установлен, то оно у тебя есть, если не установлен, то репозиторий "ReaTeam Extensions"
 
Последнее редактирование:

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
Мой примерный экшн не имеет ничего общего со стреч маркерами.
Твой примерный кастом не имеет ничего общего со стретч маркерами — но судя из всей беседы, ты посоветовал Андрею экшен
"Action: Toggle arm of next action", соответственно ему из твоего совета нужно сделать вот такой кастом
"Action: Toggle arm of next action"
"Archie_Item; Add Remove stretch marker under mouse cursor and snap to nearest grid.lua"
А такой кастом, как и модифаеры перемещает курсор к стретч маркеру по непонятным причинам.(
 
Последнее редактирование:

vax

Чукча-писатель
13 Ноя 2002
7.397
4.620
113
44
Kiev/UA
www.andivaxmastering.com
2. Вот в этот код вставляешь содержимое скрипта, в коде написано куда.
вот так?


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 function loop();
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();
 

vax

Чукча-писатель
13 Ноя 2002
7.397
4.620
113
44
Kiev/UA
www.andivaxmastering.com
Что получилось ?
всё получилось! )))
я через global startup action подцепил его, верно?

PS а как изменить для скрипта опции старта (Terminate и тд), если уже один раз их задал?

PPS Задонатил ещё чуток. Спасибо! )
 
  • Like
Реакции: Archie's

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
я через global startup action подцепил его, верно?
Да, верно.
PS а как изменить для скрипта опции старта (Terminate и тд), если уже один раз их задал?
Не понял, поподробнее пожалуйста.
PPS Задонатил ещё чуток. Спасибо! )
Благодарю!!! ):Dle79:
 
Последнее редактирование:

vax

Чукча-писатель
13 Ноя 2002
7.397
4.620
113
44
Kiev/UA
www.andivaxmastering.com
Не понял, поподробнее пожалуйста.
При первом старте скрипта нового, он спрашивает как ему себя вести. Terminate и тд... И галку можно поставить на "remember choise" (как-то так называется). А как переназначить поведение?
 

vitalker

Well-Known Member
8 Окт 2013
5.085
2.195
113
Гродно
@vax, такое окошко обычно выскакивает, если скрипт уже запущен и вы запускаете его ещё раз.
 
  • Like
Реакции: vax

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
@vax, То есть ты поставил галку и нажал не на ту кнопку и теперь хочешь сбросить, что бы этот запрос опять открывался , правильно?
Если так, то открываешь файл "reaper-kb.ini" и ищешь в нем названия скрипта (ctrl+f - для поиска) в этой строке, где названия скрипта, в начале строки видишь что то типа того
168974
, второй параметр отвечает за это, если ты поставил галку, то у тебя там будет скорее всего
168976
или
168975
.
Для того что бы сбросить - закрываешь рипер, выставляешь четверку
168978
, сохраняешь файл и открываешь рипер. Все.
------
Пост #399 обновил (код), обнови у себя в скрипте. А при запросе поставь галку и New .
168979

В прошлый раз я это не учел, и сейчас он у тебя работает неадекватно скорей всего, либо через раз, если нажал Terminate ..., либо как из пулемета ставит маркеры, если нажал New ...
 
  • Like
Реакции: vax

vax

Чукча-писатель
13 Ноя 2002
7.397
4.620
113
44
Kiev/UA
www.andivaxmastering.com
@vax
Пост #399 обновил (код), обнови у себя в скрипте. А при запросе поставь галку и New .Посмотреть вложение 168979
В прошлый раз я это не учел, и сейчас он у тебя работает неадекватно скорей всего, либо через раз, если нажал Terminate ..., либо как из пулемета ставит маркеры, если нажал New ...
спасибо!
после обновления скрипта вылетает ошибка
: 'end' expected (to close 'function' at line 1) near <eof>
 
  • Wow
Реакции: Archie's

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
после обновления скрипта вылетает ошибка
Плохо что то скопировал или при вставке что то зацепил. Обнови все поновой.
Ошибка говорит что нету вот этой "end"
168987

Заметил за клавишей alt еще такой баг (хотя это может только у меня), хоть и отключили в модифаерах все и если кликнуть по маркеру с зажатым alt, то маркер удалится вне зависимости от настроек в модифаерах.
Так вот - если ты будешь удалять маркер этим же скриптом через клавиши alt+ctrl+click назначенные через способ из сообщения #399 , то будет происходить следующее - сначала не скрипт удалит маркер, а затем уже скрипт добавит по новой маркер, так что если у тебя такая же беда с альтом, то при удалении отпускай ctrl что б зажат был только альт.
А что бы alt+клик не удалял маркер я так и не смог сделать. пробовал в модифаерах отключать во всех разделах все что связано в альтом и это не помогло.

Еще сделал вот такой способ, мне кажется он по удачнее, но тебе может и не подойдет. для этого способа надо делать кнопку в тулбаре.
В этом назначении принцип такой - в модифаерах отключать ничего не нужно, например назначаем в модифаерах на alt+ctrl+click стандартный add marker, все при нажатии на alt+ctrl+click работает стандартный add marker включаем скрипт, кнопка загорелась, все теперь при нажатии на ctrl+alt+click будет работать скрипт, опять выключаем скрипт и работает стандартный add marker.
В этом способе при запросе жмем terminate

168986

JavaScript:
    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);
 
Последнее редактирование:
  • Like
Реакции: vax и Moyses

vax

Чукча-писатель
13 Ноя 2002
7.397
4.620
113
44
Kiev/UA
www.andivaxmastering.com
Плохо что то скопировал или при вставке что то зацепил. Обнови все поновой.

Заметил за клавишей alt еще такой баг (хотя это может только у меня), хоть и отключили в модифаерах все и если кликнуть по маркеру с зажатым alt, то маркер удалится вне зависимости от настроек в модифаерах.
Так вот - если ты будешь удалять маркер этим же скриптом через клавиши alt+ctrl+click назначенные через способ из сообщения #399 , то будет происходить следующее - сначала не скрипт удалит маркер, а затем уже скрипт добавит по новой маркер, так что если у тебя такая же беда с альтом, то при удалении отпускай ctrl что б зажат был только альт.
А что бы alt+клик не удалял маркер я так и не смог сделать. пробовал в модифаерах отключать во всех разделах все что связано в альтом и это не помогло.
перевставил - заработало1
да, так и есть, ctrl+alt+click не адекватно себя ведёт при удалении stretch marker-а ) alt+click - удаляет, норм.
спасибо!
 
  • Like
Реакции: Archie's

vax

Чукча-писатель
13 Ноя 2002
7.397
4.620
113
44
Kiev/UA
www.andivaxmastering.com
ещё момент, скрипт новый не работает корректно если выделено НЕСКОЛЬКО айтемов.
1 выделям айтемы
2 ctrl+alt+click
3 стретч маркеры ставятся только на верхний айтем
 

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
ещё момент, скрипт новый не работает корректно если выделено НЕСКОЛЬКО айтемов.
Он не не работает коректно, а так и задумывалось, как и просил.
Скрипт писался: Добавить маркер растяжки под курсором мыши, а не Добавить маркер растяжки под курсором мыши и в выделенные элементы.
Завтра перепишу.
 
Последнее редактирование:
  • Like
Реакции: vax

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
@vax, Обновил!
Внутри скрипта параметр "ADD_MAR_SEL_ITEM" установишь "= true" что бы маркеры добавлялись и в выделенные айтемы. false добавляется только под курсором мыши.
 

vax

Чукча-писатель
13 Ноя 2002
7.397
4.620
113
44
Kiev/UA
www.andivaxmastering.com
чё-то не работает на несколько выделенных айтемов (

function main();



--======================================================================================
--//////////// НАСТРОЙКИ \\\\\\\\\\\\ SETTINGS //////////// НАСТРОЙКИ \\\\\\\\\\\\
--======================================================================================


local ADD_MAR_SEL_ITEM = true;
-- = true; Add marker to selected items
-- Добавить маркер в выбранные элементы
-- = false; Not add marker to selected items
-- Не добавлять маркер в выбранные элементы


--======================================================================================
--////////////// SCRIPT \\\\\\\\\\\\\\ SCRIPT ////////////// SCRIPT \\\\\\\\\\\\\\\\
--======================================================================================


--------------------------------------------------------
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 sm_mar = reaper.BR_GetMouseCursorContext_StretchMarker();
reaper.Undo_BeginBlock();
-----
local Undo;
local itemX = item;
local takeX = take;
local CountSelItem = reaper.CountSelectedMediaItems(0);
if ADD_MAR_SEL_ITEM ~= true or sm_mar >= 0 then CountSelItem = 0 end;

for i = 0,CountSelItem do;
if i > 0 then;
item = reaper.GetSelectedMediaItem(0,i-1);
take = reaper.GetActiveTake(item);
if itemX == item and takeX == take then;
item = nil;
take = nil;
end;
end;
if item and take then;
-----
local posIt = reaper.GetMediaItemInfo_Value(item,"D_POSITION");
local lenIt= reaper.GetMediaItemInfo_Value(item, "D_LENGTH");
local ratIt = reaper.GetMediaItemTakeInfo_Value(take,"D_PLAYRATE");
if posIt < mousePos and posIt+lenIt > mousePos then;
-----
--[[
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;
--]]
if sm_mar >= 0 then;
reaper.DeleteTakeStretchMarkers(take,sm_mar);
Undo = "Remove stretch marks under mouse cursor"
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);

Undo = "Add stretch marker under mouse cursor and snap to nearest grid"
end;
end;
end;
end;
reaper.Undo_EndBlock(Undo,-1);
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;
loop();
 
  • Wow
Реакции: Archie's

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
чё-то не работает на несколько выделенных айтемов (
А не работает через этот способ потому что ты когда кликаешь по айтему, то с других айтемов выделение снимается, а под мышью один выделяется и в него уже добавляется маркер.
Если честно, то думал что не смогу решить эту проблему, но получилось.
После твоего клика, когда ты снимешь выделения с остальных айтемов, скрипт тут же восстановит все выделенные айтемы (выделит их поновой). Соответственно из за этого присутствует мерцание.
На сто процентов не уверен в этом способе, иногда может работать не коректно с выделением, т.е. в некоторых случаях может не восстановить выделения (наверно), Но вроде все работает коректно.
Замени обертку.

JavaScript:
    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);
 
  • Like
Реакции: vax

Antibio

Member
20 Авг 2010
55
11
8
Baku, Azerbaijan
soundcloud.com
Братцы, помогите пожалуйста добавить в скрипт Lokasenna_Show only specified tracks функцию для запоминания docked позиции скрипта при каждой новой активации. В данный момент скрипт не запоминает свой docked state и каждый раз всплывает undocked. Я пытаюсь интегрировать этот скрипт в свой оркестровый темплейт, состоящий из нескольких сотен треков, и хочу чтобы он был всегда прикреплен к той позиции, куда я его задокировал.

Написал об этом Локасенне на форуме в кокосе, но тот как-то неохотно воспринял, сославшись на будущий апгрейд. Хотя как мне кажется, это всего лишь дело нескольких дополнительных строчек в коде, и не должно быть архисложно, поскольку большинство других скриптов, основанных на custom GUI, имеет эту функцию.

Готов задонатить как всегда.

Вот сам скрипт:

https://raw.githubusercontent.com/ReaTeam/ReaScripts/master/Tracks Properties/Lokasenna_Show only specified tracks.lua
 
Последнее редактирование:

Сейчас онлайн (Пользователей: 0, Гостей: 1)