{ "info": { "author": "Georgi Valkov", "author_email": "georgi.t.valkov@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: BSD License", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "Pyzmo\n=====\n\nPyzmo is a small hotkey library based on python-evdev_. It can call arbitrary\nPython functions in response to key presses, key chords (simultaneously pressed\nkeys) and key sequences (keys pressed in succession).\n\n\nUsage (Python)\n--------------\n\n.. code-block:: python\n\n from pyzmo import *\n from evdev.ecodes import *\n\n # triggered when KEY_PLAYPAUSE is pressed\n @key(KEY_PLAYPAUSE)\n def playpause(events):\n pass\n\n # triggered when KEY_B is pressed, held or released\n @key(KEY_B, states=['down', 'hold', 'up'])\n def back(events):\n pass\n\n # triggered when either KEY_C or KEY_D are pressed\n @key(KEY_C, KEY_D)\n def c_or_d(events):\n pass\n\n # triggered when KEY_LEFTCTRL, KEY_LEFTALT and KEY_DELETE are\n # pressed at the same time\n @chord(KEY_LEFTCTRL, KEY_LEFTALT, KEY_DELETE)\n def ctrlaltdel(events):\n pass\n\n # triggered when KEY_A, KEY_B and KEY_C are pressed one after the other\n @keyseq(KEY_A, KEY_B, KEY_C)\n def abc(events):\n pass\n\n # specifying multiple sequences for one callback (syntax applies for\n # @chord and @event as well)\n @keyseq( (KEY_1, KEY_2, KEY_3), (KEY_Z, KEY_X, KEY_C) )\n def zxc_or_123(events):\n pass\n\n # each handler receives the list of input events, because of\n # which it was triggered\n @chord(e.KEY_LEFTMETA, e.KEY_A)\n def term(events):\n for event in events:\n print(event) # instance of evdev.events.InputEvent\n #event at 1352244701.749908, code 125, type 01, val 01\n #event at 1352244701.861897, code 30, type 01, val 01\n\n ## Note 1:\n # If we define two triggers:\n # - @chord(KEY_LEFTCTRL, KEY_V)\n # - @key(KEY_V)\n #\n # Pressing 'ctrl-v' will run both their callbacks. To stop\n # processing any further triggers after a match is made, use:\n @chord(KEY_LEFTCTRL, KEY_V, quick=True)\n def copy(events):\n pass\n\n ## Note 2:\n # Pyzmo can actually match arbitrary input events. The following\n # will be triggered on scroll-wheel movement:\n @event(EV_REL, REL_WHEEL, -1)\n def vertical_scroll(events):\n pass\n\n # start main loop\n poll('/dev/input/event1', '/dev/input/event2')\n\n # .. or if you wish to get exclusive access to a input device\n from evdev import InputDevice\n dev = InputDevice('/dev/input/eventX')\n dev.grab()\n poll(dev)\n\n\nYou can also avoid polluting the global namespace with:\n\n.. code-block:: python\n\n from pyzmo import EventHandler\n from evdev import ecodes as e\n\n app = EventHandler('name')\n\n @app.key(e.KEY_F)\n def f(events): pass\n\n @app.poll(...)\n\n\nUsage (Hy)\n----------\n\nPyzmo also has a DSL that can be used from Hy_, which is a dialect of\nlisp that is embedded in Python.\n\n.. code-block:: hylang\n\n (require pyzmo.dsl)\n (import pyzmo [pyzmo [poll util]])\n\n # triggered when KEY_PLAYPAUSE is pressed\n (key PLAYPAUSE (print events))\n\n # triggered when KEY_B is pressed, held or released\n (key B [:down :hold :up] (print events))\n\n # triggered when either KEY_C or KEY_D are pressed\n (key [C D] (print events))\n\n # triggered when KEY_LEFTCTRL, KEY_LEFTALT and KEY_DELETE are\n # pressed at the same time\n (chord [LEFTCTRL LEFTALT DELETE] (print events))\n\n # triggered when KEY_A, KEY_B and KEY_C are pressed one after the other\n (seq [A B C] (print events))\n\n # start main loop\n (poll \"/dev/input/eventX\" \"/dev/input/eventY\")\n\n\nInstalling\n----------\n\nThe latest stable version of pyzmo is available on pypi, while the\ndevelopment version can be installed from github:\n\n.. code-block:: bash\n\n $ pip install pyzmo # latest stable version\n $ pip install git+git://github.com/gvalkov/pyzmo.git # latest development version\n\nAlternatively, you can install it manually like any other python package:\n\n.. code-block:: bash\n\n $ git clone git@github.com:gvalkov/pyzmo.git\n $ cd pyzmo\n $ git reset --hard HEAD $versiontag\n $ python setup.py install\n\n\n\nSimilar Projects\n----------------\n\n- triggerhappy_\n\n- actkbd_\n\n- inputexec_\n\n\nLicense\n-------\n\nPyzmo is released under the terms of the `Revised BSD License`_.\n\n\n.. _python-evdev: https://github.com/gvalkov/python-evdev.git\n.. _triggerhappy: https://github.com/wertarbyte/triggerhappy.git\n.. _actkbd: http://users.softlab.ece.ntua.gr/~thkala/projects/actkbd/\n.. _inputexec: https://github.com/rbarrois/inputexec\n.. _Hy: http://docs.hylang.org/en/stable/\n.. _`Revised BSD License`: https://raw.github.com/gvalkov/pyzmo/master/LICENSE\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/gvalkov/pyzmo", "keywords": "evdev", "license": "Revised BSD License", "maintainer": "", "maintainer_email": "", "name": "pyzmo", "package_url": "https://pypi.org/project/pyzmo/", "platform": "", "project_url": "https://pypi.org/project/pyzmo/", "project_urls": { "Homepage": "https://github.com/gvalkov/pyzmo" }, "release_url": "https://pypi.org/project/pyzmo/1.0.0/", "requires_dist": null, "requires_python": "", "summary": "tiny hotkey library and daemon", "version": "1.0.0" }, "last_serial": 3361711, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "3b95dfdf09b12aaa8d1a0f93acd40d49", "sha256": "ff92b3e49f1f10d94f7922e8bb9c270f2ac29aa6768937474e201f4b9a32bf55" }, "downloads": -1, "filename": "pyzmo-0.1.0.tar.gz", "has_sig": false, "md5_digest": "3b95dfdf09b12aaa8d1a0f93acd40d49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5756, "upload_time": "2012-11-07T00:42:32", "url": "https://files.pythonhosted.org/packages/60/b1/bfa2e3064aee153299716ee07cba7ea3a8765c1882db2b9e5590f4dd1c43/pyzmo-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "82b347300f6884317ba438af1e8bf12d", "sha256": "d6d37df19fe3674c603fadc1d42cf75ba5f7c177fb5454ef30ac9854683501b5" }, "downloads": -1, "filename": "pyzmo-0.2.0.tar.gz", "has_sig": false, "md5_digest": "82b347300f6884317ba438af1e8bf12d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4782, "upload_time": "2013-12-07T16:19:29", "url": "https://files.pythonhosted.org/packages/1e/52/e1c753788bb32da034848ded62752cfd7fc506a3cfac327e8eeba56a39db/pyzmo-0.2.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "100aada3ab96a8d14bfccf518a712136", "sha256": "cb36b12430337ac57201eaed389f7618bbafe77e54a8b7ad4c8d9636803399c4" }, "downloads": -1, "filename": "pyzmo-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "100aada3ab96a8d14bfccf518a712136", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 9941, "upload_time": "2017-11-24T19:20:50", "url": "https://files.pythonhosted.org/packages/c0/3f/c6df3daa730096382a664f5df6c001adea0a509e3565a8cbb1de2bd212d5/pyzmo-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f09acad21704333ee9f8dbaecc7924e0", "sha256": "343fcf9a2ac840a191cfeafd004076672e0c17f5a2fb01a7d0a961f15b28a433" }, "downloads": -1, "filename": "pyzmo-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f09acad21704333ee9f8dbaecc7924e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6532, "upload_time": "2017-11-24T19:20:46", "url": "https://files.pythonhosted.org/packages/f6/39/3463a104bfcfa4fab046ce3ea66351de14c225afe64745f7bbab2c53521c/pyzmo-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "100aada3ab96a8d14bfccf518a712136", "sha256": "cb36b12430337ac57201eaed389f7618bbafe77e54a8b7ad4c8d9636803399c4" }, "downloads": -1, "filename": "pyzmo-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "100aada3ab96a8d14bfccf518a712136", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 9941, "upload_time": "2017-11-24T19:20:50", "url": "https://files.pythonhosted.org/packages/c0/3f/c6df3daa730096382a664f5df6c001adea0a509e3565a8cbb1de2bd212d5/pyzmo-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f09acad21704333ee9f8dbaecc7924e0", "sha256": "343fcf9a2ac840a191cfeafd004076672e0c17f5a2fb01a7d0a961f15b28a433" }, "downloads": -1, "filename": "pyzmo-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f09acad21704333ee9f8dbaecc7924e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6532, "upload_time": "2017-11-24T19:20:46", "url": "https://files.pythonhosted.org/packages/f6/39/3463a104bfcfa4fab046ce3ea66351de14c225afe64745f7bbab2c53521c/pyzmo-1.0.0.tar.gz" } ] }