{ "info": { "author": "Anthon van der Neut", "author_email": "a.van.der.neut@ruamel.eu", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python" ], "description": "\ufeff====\nEWMH\n====\n\nEWMH (Extended Window Manager Hints) can be used to retrieve and set\ninformation about windows on Linux systems. Is does this by calling and\nparsing the output from programs like ``wmctrl``.\n\nExample\n=======\n\n::\n\n from subprocess import Popen\n from ruamel.ewmh import ExtendedWindowManagerHints as EWMH\n Popen(['xclock', '-name', 'test_xclock'])\n # there can be more than one window matching the title\n # therfore .by_title() returns a list\n clk = EWMH().by_title('test_xclock')[0]\n clk.resize_and_move(200, 200, 300, 600)\n\n\nWhy not use the ``wmctrl`` package?\n===================================\n\nBefore writing this library I tried Antonio Cuni's ``wmctrl`` package. That\nlibrary looks to be abandoned (at least from April 2013 until Oct 2014).\n\nI started ``ewmh`` because I encountered performance problems and irregular\nexceptions that I could not, initially fix. When I noticed that these problems\nwere a result of design decisions, were associated with features I did not\nneed (e.g. retrieving WM_CLASS), and because I needed something more minimal,\nbut working, I started from scratch.\n\n- ``wmctrl`` output information did not get cached and getting the\n information was horrible slow in the first place. If your machine has M\n windows open and you wanted the state for N of those windows, this caused a\n total of N * (M+1) invocations of external programs through\n ``commands.getoutput``. With 200+ open windows on my system, getting\n information took several seconds **for each window** that I was interested\n in.\n\n- ``commands.getoutput()`` is used, but that has been `deprecated since 2008\n `_, should have used\n ``subprocess.checkout_output()`` instead.\n\n- the output of ``getoutput()`` was not checked for errors.\n\n- ``os.system()`` was used resulting in an unnecessary shell invocation.\n\n- the ``xprop`` program was called **for every window open on the system**,\n although, often, none of that information is used.\n\n- to activate windows the package calls ``wmctrl`` with ``wmctrl -id -a ``,\n I was not sure what the `d` there is supposed to do, without it the command\n has the same effect/output.\n\nAfter trying to patching some of these issues, and testing, exceptions would happen which forced me to abandon it, as it was less time consuming to start from scratch. With the knowledge gained writing ``emwh`` I found that the wmctrl package currently at least doesn't handle window classes with spaces in them, nor does a program survive calling the library when there happens to be a *window without a title* somewhere on your desktop.\n\nMost of the original tests included with the ``wmctrl`` library, work with only\nminor adjustments (which seem to have to do with my top-of-the-window menu)\nand a wrapper class in ``emwh``. Moving from ``wmctrl`` to ``ewmh`` should\ntherefore be easy.", "description_content_type": null, "docs_url": null, "download_url": null, "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/ruamel/ewmh", "keywords": null, "license": "MIT license", "maintainer": null, "maintainer_email": null, "name": "ruamel.ewmh", "package_url": "https://pypi.org/project/ruamel.ewmh/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/ruamel.ewmh/", "project_urls": { "Homepage": "https://bitbucket.org/ruamel/ewmh" }, "release_url": "https://pypi.org/project/ruamel.ewmh/0.1.4/", "requires_dist": null, "requires_python": null, "summary": "retrieve and set window information on Linux (via Extended Window Manager Hints)", "version": "0.1.4" }, "last_serial": 1706276, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "1909ba24bca4a211ccb171c883165667", "sha256": "e226734a1c056e2b931feaf1f31a379328642493775d50844c116608a2fc3dc8" }, "downloads": -1, "filename": "ruamel.ewmh-0.1.1.tar.gz", "has_sig": false, "md5_digest": "1909ba24bca4a211ccb171c883165667", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7267, "upload_time": "2014-12-14T16:21:59", "url": "https://files.pythonhosted.org/packages/15/11/3c598fd40353d37276f566e93d7d5009db3522abfb73894ae4967e7e1a7c/ruamel.ewmh-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "30ad47a39a7d0d9bf85da0bcd776a2bc", "sha256": "cac22a24cb155c953f9f538ed6f64d08ccddd426baea8f50a448d5fd7b8ef3bb" }, "downloads": -1, "filename": "ruamel.ewmh-0.1.2.tar.gz", "has_sig": false, "md5_digest": "30ad47a39a7d0d9bf85da0bcd776a2bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7007, "upload_time": "2015-01-15T13:14:12", "url": "https://files.pythonhosted.org/packages/02/3e/0c25e709abc0db450f59222912962ea6092fc01ee79a3d54d0065f1f4e79/ruamel.ewmh-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "c4855a99cabf81157740f6abafcf7f6b", "sha256": "6cbf96fa8b76daf52912f24dc6f681c5a89cec549e6eb37fb8e0b3e07724d1c1" }, "downloads": -1, "filename": "ruamel.ewmh-0.1.3.tar.gz", "has_sig": false, "md5_digest": "c4855a99cabf81157740f6abafcf7f6b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7052, "upload_time": "2015-08-27T08:51:35", "url": "https://files.pythonhosted.org/packages/64/a2/2e3c21f183126a3f2413930c363b59b15b7f7636d131c2619ca2a6e65969/ruamel.ewmh-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "8082cfc8be853ba68a64fc669dd537b9", "sha256": "960c0965e85352c63d653cdc6cd7f3a56836b608ba3275c8f102f9b4f676d091" }, "downloads": -1, "filename": "ruamel.ewmh-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8082cfc8be853ba68a64fc669dd537b9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9521, "upload_time": "2015-09-03T12:16:15", "url": "https://files.pythonhosted.org/packages/dc/d3/e1e0b66428e9331e9e38c14b50aecaa67e3a18771eb57634b9ca09976039/ruamel.ewmh-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc42e47375629f3b1edbb1762f1ce9de", "sha256": "e86882ea0e621ff1140a34924a0986c1031e6b5b87c2829fef3ba4af589d32c7" }, "downloads": -1, "filename": "ruamel.ewmh-0.1.4.tar.gz", "has_sig": false, "md5_digest": "fc42e47375629f3b1edbb1762f1ce9de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10563, "upload_time": "2015-09-03T12:16:10", "url": "https://files.pythonhosted.org/packages/f4/7a/8d56ce29e9244590831398ba3bc773f57c7e268c53e44d5a47eeef8f4424/ruamel.ewmh-0.1.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8082cfc8be853ba68a64fc669dd537b9", "sha256": "960c0965e85352c63d653cdc6cd7f3a56836b608ba3275c8f102f9b4f676d091" }, "downloads": -1, "filename": "ruamel.ewmh-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8082cfc8be853ba68a64fc669dd537b9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9521, "upload_time": "2015-09-03T12:16:15", "url": "https://files.pythonhosted.org/packages/dc/d3/e1e0b66428e9331e9e38c14b50aecaa67e3a18771eb57634b9ca09976039/ruamel.ewmh-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc42e47375629f3b1edbb1762f1ce9de", "sha256": "e86882ea0e621ff1140a34924a0986c1031e6b5b87c2829fef3ba4af589d32c7" }, "downloads": -1, "filename": "ruamel.ewmh-0.1.4.tar.gz", "has_sig": false, "md5_digest": "fc42e47375629f3b1edbb1762f1ce9de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10563, "upload_time": "2015-09-03T12:16:10", "url": "https://files.pythonhosted.org/packages/f4/7a/8d56ce29e9244590831398ba3bc773f57c7e268c53e44d5a47eeef8f4424/ruamel.ewmh-0.1.4.tar.gz" } ] }