hotkeys.lua
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:3k
源码类别:

midi

开发平台:

Unix_Linux

  1. --[==========================================================================[
  2.  hotkeys.lua: hotkey handling for VLC
  3. --[==========================================================================[
  4.  Copyright (C) 2007 the VideoLAN team
  5.  $Id$
  6.  Authors: Antoine Cellerier <dionoea at videolan dot org>
  7.  This program is free software; you can redistribute it and/or modify
  8.  it under the terms of the GNU General Public License as published by
  9.  the Free Software Foundation; either version 2 of the License, or
  10.  (at your option) any later version.
  11.  This program is distributed in the hope that it will be useful,
  12.  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  GNU General Public License for more details.
  15.  You should have received a copy of the GNU General Public License
  16.  along with this program; if not, write to the Free Software
  17.  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  18. --]==========================================================================]
  19. --[==========================================================================[
  20.     This is meant to replace modules/control/hotkeys.c
  21.     (which will require some changes in the VLC core hotkeys stuff)
  22. --]==========================================================================]
  23. require("common")
  24. --common.table_print(vlc,"vlc.t")
  25. bindings = {
  26.     ["Ctrl-q"] = "quit",
  27.     ["Space"] = "play-pause",
  28.     [113] --[[q]] = "quit",
  29.     [119] --[[w]] = "demo",
  30.     [120] --[[x]] = "demo2",
  31.     }
  32. function quit()
  33.     print("Bye-bye!")
  34.     vlc.quit()
  35. end
  36. function demo()
  37.     vlc.osd.icon("speaker")
  38. end
  39. function demo2()
  40.     if not channel1 then
  41.         channel1 = vlc.osd.channel_register()
  42.         channel2 = vlc.osd.channel_register()
  43.     end
  44.     vlc.osd.message("Hey!",channel1)
  45.     vlc.osd.slider( 10, "horizontal", channel2 )
  46. end
  47. function action(func,delta)
  48.     return { func = func, delta = delta or 0, last = 0, times = 0 }
  49. end
  50. actions = {
  51.     ["quit"] = action(quit),
  52.     ["play-pause"] = action(play_pause),
  53.     ["demo"] = action(demo),
  54.     ["demo2"] = action(demo2),
  55.     }
  56. action = nil
  57. queue = {}
  58. function action_trigger( action )
  59.     print("action_trigger:",tostring(action))
  60.     local a = actions[action]
  61.     if a then
  62.         local date = vlc.misc.mdate()
  63.         if a.delta and date > a.last + a.delta then
  64.             a.times = 0
  65.         else
  66.             a.times = a.times + 1
  67.         end
  68.         a.last = date
  69.         table.insert(queue,action)
  70.         vlc.misc.signal()
  71.     else
  72.         vlc.msg.err("Key `"..key.."' points to unknown action `"..bindings[key].."'.")
  73.     end
  74. end
  75. function key_press( var, old, new, data )
  76.     local key = new
  77.     print("key_press:",tostring(key))
  78.     if bindings[key] then
  79.         action_trigger(bindings[key])
  80.     else
  81.         vlc.msg.err("Key `"..key.."' isn't bound to any action.")
  82.     end
  83. end
  84. vlc.var.add_callback( vlc.object.libvlc(), "key-pressed", key_press )
  85. --vlc.var.add_callback( vlc.object.libvlc(), "action-triggered", action_trigger )
  86. while not die do
  87.     if #queue ~= 0 then
  88.         local action = actions[queue[1]]
  89.         local ok, msg = pcall( action.func )
  90.         if not ok then
  91.             vlc.msg.err("Error while executing action `"..queue[1].."': "..msg)
  92.         end
  93.         table.remove(queue,1)
  94.     else
  95.         die = vlc.misc.lock_and_wait()
  96.     end
  97. end
  98. -- Clean up
  99. vlc.var.del_callback( vlc.object.libvlc(), "key-pressed", key_press )
  100. --vlc.var.del_callback( vlc.object.libvlc(), "action-triggered", action_trigger )