{ "info": { "author": "Nguyen Duc My", "author_email": "hcpl.prog@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: X11 Applications", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: POSIX", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Desktop Environment :: Window Managers", "Topic :: Software Development :: Libraries" ], "description": "========\nxkbgroup\n========\n\n.. image:: https://img.shields.io/badge/python-3.2+-blue.svg\n\n.. image:: https://img.shields.io/pypi/v/xkbgroup.svg\n :target: https://pypi.python.org/pypi/xkbgroup\n\n.. image:: https://img.shields.io/badge/license-MIT-blue.svg\n :target: https://github.com/hcpl/xkbgroup/blob/master/LICENSE\n\nUse this library to change the keyboard layout through XKB extension (subsystem)\nof the X server system. Both library and command line script included.\n\n\n.. contents:: **Table of Contents**\n\n\nDependencies\n------------\n\n* Python 3.2+\n* ``libX11.so.6`` shared library which you must have by default if you use\n X server\n\n\nInstallation\n------------\n\n>From PyPI package xkbgroup__\n++++++++++++++++++++++++++++\n\n__ https://pypi.python.org/pypi/xkbgroup\n\n.. code-block:: sh\n\n pip install xkbgroup\n\n\nLibrary usage\n-------------\n\n.. code-block:: sh\n\n # Assume we have the following configuration\n $ setxkbmap -layout us,ru,ua,fr\n # Change layout once before calling python\n $ python\n\n.. code-block:: python\n\n >>> from xkbgroup import XKeyboard\n >>> xkb = XKeyboard()\n >>> xkb.groups_count\n 4\n >>> xkb.group_num\n 1\n >>> xkb.group_num = 2\n >>> xkb.group_num\n 2\n >>> xkb.group_num -= 2\n >>> xkb.group_num\n 0\n >>> xkb.groups_names\n ['English (US)', 'Russian', 'Ukrainian', 'French']\n >>> xkb.group_name\n 'English (US)'\n >>> xkb.group_name = 'Ukrainian'\n >>> xkb.group_name\n 'Ukrainian'\n >>> xkb.group_num\n 2\n >>> xkb.groups_symbols\n ['us', 'ru', 'ua', 'fr']\n >>> xkb.group_symbol\n 'ua'\n >>> xkb.group_symbol = 'fr'\n >>> xkb.group_symbol\n 'fr'\n >>> xkb.groups_variants\n ['', '', '', '']\n >>> xkb.group_variant\n ''\n >>> xkb.group_num -= 3\n >>> xkb.group_variant\n ''\n >>> xkb.group_num\n 0\n >>> xkb.group_data\n GroupData(num=0, name='English (US)', symbol='us', variant='')\n >>> xkb.groups_data\n [GroupData(num=0, name='English (US)', symbol='us', variant=''), GroupData(num=1, name=\n 'Russian', symbol='ru', variant=''), GroupData(num=2, name='Ukrainian', symbol='ua', va\n riant=''), GroupData(num=3, name='French', symbol='fr', variant='')]\n >>> xkb.format('{num} => {symbol}')\n '0 => us'\n >>> xkb.group_num = 1\n >>> xkb.format('{num} => {symbol}')\n '1 => ru'\n >>> xkb.group_num = 3\n >>> xkb.format('{num}: {symbol} - {name} \"{variant}\"')\n '3: fr - French \"\"'\n >>> xkb.format('{count}')\n '4'\n >>> xkb.format('{names}')\n \"['English (US)', 'Russian', 'Ukrainian', 'French']\"\n >>> xkb.format('{names::}')\n 'English (US)RussianUkrainianFrench'\n >>> xkb.format('{names:: - }')\n 'English (US) - Russian - Ukrainian - French'\n >>> xkb.format('{symbols:: - }')\n 'us - ru - ua - fr'\n >>> xkb.format('{symbols:s: - }')\n 'us - ru - ua - fr'\n >>> xkb.format('{all_data}')\n \"[GroupData(num=0, name='English (US)', symbol='us', variant=''), GroupData(num=1, name\n ='Russian', symbol='ru', variant=''), GroupData(num=2, name='Ukrainian', symbol='ua', v\n ariant=''), GroupData(num=3, name='French', symbol='fr', variant='')]\"\n >>> xkb.format('{all_data:{{num}}}')\n \"['0', '1', '2', '3']\"\n >>> xkb.format('{all_data:/* {{name}} */}')\n \"['/* English (US) */', '/* Russian */', '/* Ukrainian */', '/* French */']\"\n >>> xkb.format('{all_data:{{symbol}}:\\n}')\n 'us\\nru\\nua\\nfr'\n >>> print(xkb.format('{all_data:{{symbol}}:\\n}'))\n us\n ru\n ua\n fr\n >>> print(xkb.format('{all_data:{{num}}\\\\: {{symbol}} - {{name}} - \"{{variant}}\":\\n}'))\n 0: us - English (US) - \"\"\n 1: ru - Russian - \"\"\n 2: ua - Ukrainian - \"\"\n 3: fr - French - \"\"\n >>>\n\n\nCommand line features mapping\n-----------------------------\n\n+----------+-------------------------------------+--------------------------------------+\n| Category | Library | Command line |\n+==========+=====================================+======================================+\n| Get | ``xkb.group_num`` | ``xkbgroup get num`` |\n| +-------------------------------------+--------------------------------------+\n| | ``xkb.group_name`` | ``xkbgroup get name`` |\n| +-------------------------------------+--------------------------------------+\n| | ``xkb.group_symbol`` | ``xkbgroup get symbol`` |\n| +-------------------------------------+--------------------------------------+\n| | ``xkb.group_variant`` | ``xkbgroup get variant`` |\n| +-------------------------------------+--------------------------------------+\n| | ``xkb.group_data`` | ``xkbgroup get current_data`` |\n| +-------------------------------------+--------------------------------------+\n| | ``xkb.groups_count`` | ``xkbgroup get count`` |\n| +-------------------------------------+--------------------------------------+\n| | ``xkb.groups_names`` | ``xkbgroup get names`` |\n| +-------------------------------------+--------------------------------------+\n| | ``xkb.groups_symbols`` | ``xkbgroup get symbols`` |\n| +-------------------------------------+--------------------------------------+\n| | ``xkb.groups_variants`` | ``xkbgroup get variants`` |\n| +-------------------------------------+--------------------------------------+\n| | ``xkb.groups_data`` | ``xkbgroup get all_data`` |\n+----------+-------------------------------------+--------------------------------------+\n| Set | ``xkb.group_num = 2`` | ``xkbgroup set num 2`` |\n| +-------------------------------------+--------------------------------------+\n| | ``xkb.group_name = 'English (US)'`` | ``xkbgroup set name 'English (US)'`` |\n| +-------------------------------------+--------------------------------------+\n| | ``xkb.group_symbol = 'fr'`` | ``xkbgroup set symbol fr`` |\n+----------+-------------------------------------+--------------------------------------+\n| Format | ``xkb.format('{format_str}')`` | ``xkbgroup format '{format_str}'`` |\n+----------+-------------------------------------+--------------------------------------+\n\n\nNaming convention\n-----------------\n\nThroughout the whole XKB subsystem the `so-called groups represent actual\nkeyboard layouts`__. This library follows the same convention and names of the\nAPI methods start with ``group_`` or ``groups_``.\n\n__ https://wiki.archlinux.org/index.php/X_KeyBoard_extension#Keycode_translation\n\n\nClasses\n-------\n\nThese all reside in ``xkbgroup/core.py``:\n\n* ``XKeyboard`` \u2014 the main class:\n\n - ``__init__(self, auto_open=True, non_symbols=None)``:\n\n + ``auto_open`` \u2014 if ``True`` then automatically call ``open_display()``\n on initialization.\n + ``non_symbols`` \u2014 either iterable of string non-symbol names or None to\n use the default set of non-symbol names.\n - ``open_display()`` \u2014 establishes connection with X server and prepares\n objects necessary to retrieve and send data.\n - ``close_display()`` \u2014 closes connection with X server and cleans up\n objects created on ``open_display()``.\n - ``group_*`` \u2014 properties for accessing current group data:\n\n + ``group_num`` \u2014 get/set current group number\n (e.g. ``0``, ``2``, ``3``).\n + ``group_name`` \u2014 get/set current group full name\n (e.g. ``English (US)``, ``Russian``, ``French``).\n + ``group_symbol`` \u2014 get/set current group symbol\n (e.g. ``us``, ``ru``, ``fr``).\n + ``group_variant`` \u2014 get (only) current group variant\n (e.g. ``\u2006``, ``dos``, ``latin9``).\n + ``group_data`` \u2014 get (only) all data about the current group.\n In fact, assembles all previous ``group_*`` values.\n - ``groups_*`` \u2014 properties for querying info about all groups set by\n ``setxkbmap``:\n\n + ``groups_count`` \u2014 get number of all groups.\n + ``groups_names`` \u2014 get names of all groups.\n + ``groups_symbols`` \u2014 get symbols of all groups.\n + ``groups_variants`` \u2014 get variants of all groups.\n + ``groups_data`` \u2014 get all data about all groups\n by assembling all previous ``groups_*`` values.\n\n - ``format()`` \u2014 obtain a formatted output, see ``_\n for details.\n\n* ``X11Error`` \u2014 an exception class, raised for errors on X server issues.\n\n\nHelper files\n------------\n\nThere are also complementary files:\n\n* ``generate_bindings.sh`` \u2014 a shell script which generates Python bindings\n to X server structures, functions and ``#define`` definitions by:\n\n - converting X11 C headers using ``h2xml`` and ``xml2py``;\n - creating ``ctypes`` references to functions from ``libX11.so.6`` using\n ``xml2py``.\n\n* ``xkbgroup/xkb.py`` \u2014 the output of the above script, usable for Xlib\n development under Python.\n\n\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/hcpl/xkbgroup", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "xkbgroup", "package_url": "https://pypi.org/project/xkbgroup/", "platform": "", "project_url": "https://pypi.org/project/xkbgroup/", "project_urls": { "Homepage": "https://github.com/hcpl/xkbgroup" }, "release_url": "https://pypi.org/project/xkbgroup/0.2.0/", "requires_dist": null, "requires_python": "", "summary": "Query and change XKB layout state", "version": "0.2.0" }, "last_serial": 3229345, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "421ec2b98a0a1df80e68316093ffaf44", "sha256": "aa616f1c79b3c7239e623868ea9ca40d32b1b4c456ef84d2ff568eb0e6f0d0ab" }, "downloads": -1, "filename": "xkbgroup-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "421ec2b98a0a1df80e68316093ffaf44", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 70250, "upload_time": "2016-11-01T03:31:03", "url": "https://files.pythonhosted.org/packages/f3/46/1b8566d47aabc195dcff80aa2662b4e35ed79a5948629c226acaa59cbd78/xkbgroup-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2a37d1757feaf77752f000c00ff73636", "sha256": "7055ec724b2cedd5ba1d8359cc9ae3ce2bfab0310e0483c5ffac938eceff2d1f" }, "downloads": -1, "filename": "xkbgroup-0.1.tar.gz", "has_sig": false, "md5_digest": "2a37d1757feaf77752f000c00ff73636", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69713, "upload_time": "2016-11-01T03:31:00", "url": "https://files.pythonhosted.org/packages/89/7e/2b0cb892d5c62e10f747d4f2343703e7af58d20e55caa26d5cf0c8a61f3e/xkbgroup-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "153331f92f12421d255d77b8f29caa10", "sha256": "7a3116a15d1453d3767d590c986d1dcccf82eb6e6de3171879b7bbcf81ddb6ca" }, "downloads": -1, "filename": "xkbgroup-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "153331f92f12421d255d77b8f29caa10", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 71373, "upload_time": "2016-11-01T21:04:23", "url": "https://files.pythonhosted.org/packages/d9/26/3c201ade73d2e439d65cca7a028c96cc6c7d119d44734db2b46ac7053560/xkbgroup-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8148c4545dbe8c41defe0d141f874309", "sha256": "269c77c4e4967f0060064597373bcf86426a8455942c9a3fda2c219f41990663" }, "downloads": -1, "filename": "xkbgroup-0.1.1.tar.gz", "has_sig": false, "md5_digest": "8148c4545dbe8c41defe0d141f874309", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 70720, "upload_time": "2016-11-01T21:04:20", "url": "https://files.pythonhosted.org/packages/0e/df/6933d135e0d8f4fd4d3d91890500a89de2cbff60993589d9058b25318ae2/xkbgroup-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "ee5373f63bf42687d111fde3bb7f3485", "sha256": "929507958af2743d4bd2e5714a76df506dd9b4ee3651b4e7d09a836377a18a96" }, "downloads": -1, "filename": "xkbgroup-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "ee5373f63bf42687d111fde3bb7f3485", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 74525, "upload_time": "2016-11-02T01:34:48", "url": "https://files.pythonhosted.org/packages/a7/3e/213d2c6bf87a7f45d4de104715eb16882ef230530a0e6ad928ed50b317e0/xkbgroup-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4f0d4454c8e7ee02f8ba33f58cf127d2", "sha256": "d37a85cb6e5446e12e4e3567d136d1d864d85190c4257636488ad0fe28664994" }, "downloads": -1, "filename": "xkbgroup-0.1.2.tar.gz", "has_sig": false, "md5_digest": "4f0d4454c8e7ee02f8ba33f58cf127d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 73089, "upload_time": "2016-11-02T01:34:45", "url": "https://files.pythonhosted.org/packages/4b/b9/103b7cf0de047a12577b2e02422399d685f35abe7ce3426e57164b63315f/xkbgroup-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "11e95d79c62e642eb335feb349e2d94a", "sha256": "c9b8d1c62851308798cd37936c8fcde1ba8ec825a895deddeaa285dfffadd5fb" }, "downloads": -1, "filename": "xkbgroup-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "11e95d79c62e642eb335feb349e2d94a", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 75750, "upload_time": "2016-11-02T21:55:29", "url": "https://files.pythonhosted.org/packages/74/53/71170209bd6ba47b14de3e18a213a298d68bc51ae516c4b8244173984ba1/xkbgroup-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f8d7ce8d9cfa2a458786a512ddd5a3b8", "sha256": "c663ec1edf5bea252ff18e79ba5f9fd876052cf6d188448754ffed0d8d5c7f99" }, "downloads": -1, "filename": "xkbgroup-0.1.3.tar.gz", "has_sig": false, "md5_digest": "f8d7ce8d9cfa2a458786a512ddd5a3b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 73074, "upload_time": "2016-11-02T21:55:26", "url": "https://files.pythonhosted.org/packages/62/20/a8ad91366a5ae5e5c53da0fe1f6b3d9ccfc7cad2e78797ac077275015273/xkbgroup-0.1.3.tar.gz" } ], "0.1.4.1": [ { "comment_text": "", "digests": { "md5": "b7cb6428714570a59edc99318980258d", "sha256": "54c8c7a5130c12b337bc988912319249d3831175d748e221d2093db94e1d9e24" }, "downloads": -1, "filename": "xkbgroup-0.1.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b7cb6428714570a59edc99318980258d", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 75962, "upload_time": "2016-11-03T15:49:42", "url": "https://files.pythonhosted.org/packages/b6/95/8d579e7fca56246724cfabe65dcdedeb96f36511c870cfb0600bef199e55/xkbgroup-0.1.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2b3166e8f01ea8bc7739a0bc4f0925fe", "sha256": "1c4542f7b227f900f1bb235aff5208c5a69573c868dab5bd55ae0d142ddb9402" }, "downloads": -1, "filename": "xkbgroup-0.1.4.1.tar.gz", "has_sig": false, "md5_digest": "2b3166e8f01ea8bc7739a0bc4f0925fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 73301, "upload_time": "2016-11-03T15:49:39", "url": "https://files.pythonhosted.org/packages/2a/26/2794c0c233710eafdd74d95fc8bf4c34d6635cfec9c41d3f687d3c08d1c9/xkbgroup-0.1.4.1.tar.gz" } ], "0.1.4.2": [ { "comment_text": "", "digests": { "md5": "3bb1b703ec500f158680ffc0223c4d21", "sha256": "82f44d03570689e4932bd2aa61295b66e2244264852c9c08c65da82d583b76fa" }, "downloads": -1, "filename": "xkbgroup-0.1.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3bb1b703ec500f158680ffc0223c4d21", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 74352, "upload_time": "2017-01-13T03:03:21", "url": "https://files.pythonhosted.org/packages/5d/53/d8dbbef70b4f524ecdf70ba28c5cc9d86fde52bf4b278e6ef3f0cdbc8d42/xkbgroup-0.1.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f053c751ad3fc65c3b90ab0eee360dad", "sha256": "0c44f5eee4959e4679f7cffc344a8f494a67cd519395b8c044a344510d00f3dc" }, "downloads": -1, "filename": "xkbgroup-0.1.4.2.tar.gz", "has_sig": false, "md5_digest": "f053c751ad3fc65c3b90ab0eee360dad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 75000, "upload_time": "2017-01-13T03:03:18", "url": "https://files.pythonhosted.org/packages/66/11/720f6b1cffb575005d93a64e43e19938caad8536d62cbf3017dc53da49eb/xkbgroup-0.1.4.2.tar.gz" } ], "0.1.4.3": [ { "comment_text": "", "digests": { "md5": "5d3a202412cc709568fda22e27f7a907", "sha256": "6e38c5841413dc1b048cd4dd2f36af1288113beee67e8f7e502162b4a291daac" }, "downloads": -1, "filename": "xkbgroup-0.1.4.3-py3-none-any.whl", "has_sig": false, "md5_digest": "5d3a202412cc709568fda22e27f7a907", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 74351, "upload_time": "2017-01-23T20:28:41", "url": "https://files.pythonhosted.org/packages/01/e8/fe36bff9bd569ad0d3db313773c22942100951308d97b3c2fe5f653ebee7/xkbgroup-0.1.4.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "44b08c197c0db1bc2833f65b3ae8c972", "sha256": "837c2062f84c9caef47bc9add7fb86e0d38ee6581ff7297bd0cba81e9b431709" }, "downloads": -1, "filename": "xkbgroup-0.1.4.3.tar.gz", "has_sig": false, "md5_digest": "44b08c197c0db1bc2833f65b3ae8c972", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76689, "upload_time": "2017-01-23T20:28:38", "url": "https://files.pythonhosted.org/packages/d5/7f/b79b01996780d11126897eed024ea1e5bbfb9635f23673d203f711a99637/xkbgroup-0.1.4.3.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ae3b0aebe35b1d0618e4d0e3a0a8bbdd", "sha256": "0feeecded263b04e9239de34f06c925af7b3b482030fb1208e037ff266182a78" }, "downloads": -1, "filename": "xkbgroup-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ae3b0aebe35b1d0618e4d0e3a0a8bbdd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 80936, "upload_time": "2017-10-06T01:42:25", "url": "https://files.pythonhosted.org/packages/2e/e3/f51bfc6fc2e54be77729973f07083b32792aa0ae7e5f931ad04c1fe0c7a4/xkbgroup-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "da7b6792f70421936e52c0c6f524db62", "sha256": "171dadb0cc85292bfeda74251a3eb9b047235e01fabc1864416343a4fb456cbd" }, "downloads": -1, "filename": "xkbgroup-0.2.0.tar.gz", "has_sig": false, "md5_digest": "da7b6792f70421936e52c0c6f524db62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79388, "upload_time": "2017-10-06T01:42:27", "url": "https://files.pythonhosted.org/packages/c8/6d/b93231376224ac5afc72552ffcac12f6d4300e61ed78996a82c6b244770a/xkbgroup-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ae3b0aebe35b1d0618e4d0e3a0a8bbdd", "sha256": "0feeecded263b04e9239de34f06c925af7b3b482030fb1208e037ff266182a78" }, "downloads": -1, "filename": "xkbgroup-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ae3b0aebe35b1d0618e4d0e3a0a8bbdd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 80936, "upload_time": "2017-10-06T01:42:25", "url": "https://files.pythonhosted.org/packages/2e/e3/f51bfc6fc2e54be77729973f07083b32792aa0ae7e5f931ad04c1fe0c7a4/xkbgroup-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "da7b6792f70421936e52c0c6f524db62", "sha256": "171dadb0cc85292bfeda74251a3eb9b047235e01fabc1864416343a4fb456cbd" }, "downloads": -1, "filename": "xkbgroup-0.2.0.tar.gz", "has_sig": false, "md5_digest": "da7b6792f70421936e52c0c6f524db62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79388, "upload_time": "2017-10-06T01:42:27", "url": "https://files.pythonhosted.org/packages/c8/6d/b93231376224ac5afc72552ffcac12f6d4300e61ed78996a82c6b244770a/xkbgroup-0.2.0.tar.gz" } ] }