View Single Post
Old 04-24-2019, 01:47 PM   #1
Reno.thestraws
Human being with feelings
 
Reno.thestraws's Avatar
 
Join Date: Nov 2009
Location: Belgium
Posts: 9,752
Default Besoin d'aide des scripters

Bonjour à tous

Grâce au snippet de code de X Raym, j'ai pondu ceci

Code:
--[[
 * ReaScript Name: Continuous push shortcut to toggle arm action
 * Author: X-Raym & ReNo
 * Licence: GPL v3
 * REAPER: 5.0
 * Version: 1.0
--]]
 
--[[
 * Changelog:
 * v1.0 (2019-04-10)
  + Initial Release
--]]

-- Note: Link your keys to No-op (no action) in action list or to the orignal action 
-- Note: Be very strict about focus (is arrange view in focus, is mouse over item etc) else the action might trigger at unexpected moment (like writing track name)

-- USER CONFIG AREA --
action_id = 40012 -- Item: Split items at edit or play cursor
VirtualKeyCode = 0x53 -- S -- https://docs.microsoft.com/en-us/windows/desktop/inputdev/virtual-key-codes
section = "Main"
----------------------

-- Globals
armed, section = reaper.GetArmedCommand()
 if armed == action_id then
 toggle_state = 1
 else
 toggle_state = 0 
end
-- Set ToolBar Button State
function SetButtonState( set )
  if not set then set = 0 end
  local is_new_value, filename, sec, cmd, mode, resolution, val = reaper.get_action_context()
  local state = reaper.GetToggleCommandStateEx( sec, cmd )
  reaper.SetToggleCommandState( sec, cmd, set ) -- Set ON
  reaper.RefreshToolbar2( sec, cmd )
end
  
-- Main Function (which loop in background)
function main()

  retval, state = reaper.JS_VKeys_GetState()
  window, seg, detail= reaper.BR_GetMouseCursorContext()
  if state:byte(VirtualKeyCode) ~= 0 then
    if toggle_state == 0 and window == "arrange" then
      --reaper.ShowConsoleMsg("G key is pressed" .. "\n")
      reaper.ArmCommand( action_id , "Main") -- Toggle grid
      reaper.UpdateArrange()
      toggle_state = 1
    end
  else
    if toggle_state == 1 and window == "arrange" then
      --reaper.ShowConsoleMsg("G key is released" .. "\n")
      reaper.ArmCommand(0, "Main") -- Toggle grid
      reaper.UpdateArrange()
      toggle_state = 0
    end
  end
  
  reaper.defer( main )
  
end

-- RUN
if not reaper.JS_VKeys_GetState then
  reaper.ShowConsoleMsg('Please Install js_ReaScriptAPI extension.\nhttps://forum.cockos.com/showthread.php?t=212174\n')
else
  reaper.ClearConsole()
  SetButtonState( 1 )
  main()
  reaper.atexit( SetButtonState )
end

C'est un script defer qui fait en sorte que lorsque la touche "S" du clavier est maintenue, l'action "Item: Split items at edit or play cursor" est armée dans la souris jusqu'au relachement de la touche "S"

C'est pratique mais il y'a quelques problèmes

-Si je veux avoir ce confort ergonomique sur d'autres raccourcis, il faut pondre autant de script que d'action (et le lancer tous au démarrage de RPR)

-La touche concernée n'est pas en rapport avec le raccourcis clavier affecté au script. pire, si j'alloue le raccourcis clavier S à une autre action, celui-ci fonctionne normalement et on peut très vite perdre en cohérence si on change des raccourcis clavier


Je me demandais juste si il n'y avait pas moyen d'obtenir ces deux choses via lua et/ou l'API de RPR (et extensions)

1) intercepter les virtual keycode des touches enfoncées
2) que reaper vérifie si la touche n'est pas allouée à une raccourcis clavier et, le cas échéant, chopper le command id de l'action en question et sa section?


Ca permettrait de n'avoir qu'un gros script qui permet de faire passer n'importe quel action en mode "arm" à partir du moment où l'on maintient la touche de raccourcis qui lui est allouée!


Des idées?

D'avance merci
Reno.thestraws is offline   Reply With Quote