{ "info": { "author": "Johan Nestaas", "author_email": "johannestaas@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Environment :: MacOS X", "Environment :: Win32 (MS Windows)", "Environment :: X11 Applications :: Qt", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python" ], "description": "cursed!::\n\n ______ __ __ ______ ______ ______ _____ \n /\\ ___\\ /\\ \\/\\ \\ /\\ == \\ /\\ ___\\ /\\ ___\\ /\\ __-. \n \\ \\ \\____ \\ \\ \\_\\ \\ \\ \\ __< \\ \\___ \\ \\ \\ __\\ \\ \\ \\/\\ \\ \n \\ \\_____\\ \\ \\_____\\ \\ \\_\\ \\_\\ \\/\\_____\\ \\ \\_____\\ \\ \\____- \n \\/_____/ \\/_____/ \\/_/ /_/ \\/_____/ \\/_____/ \\/____/ \n \n\nSimplified curses interface with concurrency, for quick and sane curses apps.\n\nAllows easy creation of windows and menus. Code for each window runs concurrently.\n\nPlease see full documentation available here: http://pythonhosted.org/cursed/\n\ncursed was tested with Python 3.4 and 2.7, and depends on the Python package six for compatibility.\n\nInstallation\n------------\n\nWith pip, for the latest stable::\n\n $ pip install cursed\n\nOr from the project root directory::\n\n $ python setup.py install\n\nUsage\n-----\n\nExample::\n\n from cursed import CursedApp, CursedWindow\n\n # the main context of the curses application\n app = CursedApp()\n \n # Derive from CursedWindow to declare curses windows to be created after app.run()\n # It is required to declare X, Y, WIDTH, and HEIGHT for each window.\n # You'll want to put the main looping code for each window thread in the `update` class function.\n \n class MainWindow(CursedWindow):\n \n # Coordinate for top-left of window.\n X, Y = (0, 0)\n \n # WIDTH and HEIGHT can be 'max' or integers.\n WIDTH, HEIGHT = ('max', 'max')\n \n # Create a default border around the window.\n BORDERED = True\n\n @classmethod\n def update(cls):\n ''' update runs every tick '''\n \n # Hello world printed at x,y of 0,0\n cls.addstr('Hello, world!', 0, 0)\n \n # Get character keycode of keypress, or None.\n if cls.getch() == 27:\n # Escape was pressed. Quit.\n # 'quit' must be triggered for each open window for the program to quit.\n # Call cls.trigger('quit') to quit the window you're in, and to quit the other\n # declared windows, call OtherWindow.trigger('quit') which will run in that\n # window's thread, regardless of where it's called.\n cls.trigger('quit')\n\n # To trigger app to start\n result = app.run()\n \n # check if ctrl-C was pressed\n if result.interrupted():\n print('Quit!')\n else:\n # Raises an exception if any thread ran into a different exception.\n result.unwrap()\n\nMany more examples are available in the root of the repository at examples/\n\nRelease Notes\n-------------\n\n:0.2.0:\n - exposed gevent.sleep through a classmethod ``cls.sleep(seconds=0)``.\n This allows users to fix issues with long running update functions causing other windows to\n not respond.\n - Added a CursedWindow PAD, like the curses pad. This can have a huge width and height greater than\n the terminal width, but allow you to scroll around it. Useful for windows which need only display\n a smaller rectange of a larger window, like a map that scrolls around with arrow keys.\n:0.1.9:\n - fixed the ``write`` and ``getstr`` classmethods, since they called _fix_xy twice\n - added info to menu example to explain ``addstr`` in update will overwrite menu display\n:0.1.8:\n - added tons of documentation and examples\n:0.1.7:\n - Better CursedMenu API\n:0.1.6:\n - WIDTH or HEIGHT specified as 'max' will stretch to the full width or height of the terminal\n:0.1.5:\n - patched issue with returning bytes in getstr\n:0.1.4:\n - Implemented getstr\n:0.1.3:\n - Fixed menu to fill up right side with whitespace\n:0.1.2:\n - fixed menus stealing keypresses\n:0.1.1:\n - left and right open menus to sides\n - refactored menus\n:0.1.0:\n - implemented menus!\n:0.0.2:\n - implemented lots from the following:\n 1. https://docs.python.org/2/library/curses.html\n 2. https://docs.python.org/2/howto/curses.html\n:0.0.1:\n - Project created", "description_content_type": "", "docs_url": "https://pythonhosted.org/cursed/", "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://www.bitbucket.org/johannestaas/cursed", "keywords": "", "license": "GPLv3+", "maintainer": "", "maintainer_email": "", "name": "cursed", "package_url": "https://pypi.org/project/cursed/", "platform": "", "project_url": "https://pypi.org/project/cursed/", "project_urls": { "Homepage": "https://www.bitbucket.org/johannestaas/cursed" }, "release_url": "https://pypi.org/project/cursed/0.2.1/", "requires_dist": null, "requires_python": "", "summary": "Simplified curses", "version": "0.2.1" }, "last_serial": 4088035, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "66535e6510a5f20cdb80cdf6482e9483", "sha256": "143fc165d812cb03f0cb971822eac11f9c5d82d8da81a65d487c93ecd1f7ea11" }, "downloads": -1, "filename": "cursed-0.1.0.tar.gz", "has_sig": false, "md5_digest": "66535e6510a5f20cdb80cdf6482e9483", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8916, "upload_time": "2016-05-26T08:23:40", "url": "https://files.pythonhosted.org/packages/36/b9/5359e3014d8ab7f469df0b246415a34aaf9679625479158dbce86a8c9cf6/cursed-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "9b2c6205cc452ffe7d3d5ccd0cc76e6e", "sha256": "ffd800bf96e5e89c59fb1d8408a08c60dab41a1a3d5f232d036d7cd55450b8fc" }, "downloads": -1, "filename": "cursed-0.1.1.tar.gz", "has_sig": false, "md5_digest": "9b2c6205cc452ffe7d3d5ccd0cc76e6e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9401, "upload_time": "2016-05-26T09:31:32", "url": "https://files.pythonhosted.org/packages/77/01/cdc882f5a98344ae4ff462859deeb5daf9f2c3c738322527628ace2b7c20/cursed-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "0114ede36fe512a635411830ebc91817", "sha256": "d85a0a1ca34aec4c9ca3ed16254b5d4ba68cec1cc694493bc1b0a44ed212582a" }, "downloads": -1, "filename": "cursed-0.1.2.tar.gz", "has_sig": false, "md5_digest": "0114ede36fe512a635411830ebc91817", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9433, "upload_time": "2016-05-26T09:37:11", "url": "https://files.pythonhosted.org/packages/43/dd/fc5d2e80536a38d57b202fdea26a305776140cc59649edee92af46308657/cursed-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "62dd5e223ea22227c7d59b6c692a2f6a", "sha256": "e572470e30ef9a65a1ad031f2483be7325cfac13879cee48d78805fdc2a6720f" }, "downloads": -1, "filename": "cursed-0.1.3.tar.gz", "has_sig": false, "md5_digest": "62dd5e223ea22227c7d59b6c692a2f6a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7900, "upload_time": "2016-05-26T18:07:34", "url": "https://files.pythonhosted.org/packages/82/14/b0db799ac6f52b0d0dc60794f4c518704e834405ea3535a8addaa21a9fc6/cursed-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "d4cd2794508bf99b77dc93f005a8648d", "sha256": "9e0d8f3e291ba0018c4aebacc03e676afc64ed43dc9463f6e4dd61b08c4ddabc" }, "downloads": -1, "filename": "cursed-0.1.4.tar.gz", "has_sig": false, "md5_digest": "d4cd2794508bf99b77dc93f005a8648d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8037, "upload_time": "2016-05-26T20:23:32", "url": "https://files.pythonhosted.org/packages/d5/85/7cd66de88508fe6a252828e2498ffa4a61ef1ef13fc1344b324784d6b899/cursed-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "d8c41c87f3eb018698db090e7f61d6f7", "sha256": "d132fb5fc65825bcf3cc283fc428c26e7b8101aa610b696eb7c360e65e918996" }, "downloads": -1, "filename": "cursed-0.1.5.tar.gz", "has_sig": false, "md5_digest": "d8c41c87f3eb018698db090e7f61d6f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9725, "upload_time": "2016-05-27T10:13:16", "url": "https://files.pythonhosted.org/packages/9a/f4/1781dc739b17d863cf0545c5763da0f3d516abc0264f04e5d34e564809ee/cursed-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "76e6533e078e8c73f048bf1f4775155d", "sha256": "1ffb0c2c9f49004012626483f449133a2ac2142bf0a1c2c7b16069d1bf9cd937" }, "downloads": -1, "filename": "cursed-0.1.6.tar.gz", "has_sig": false, "md5_digest": "76e6533e078e8c73f048bf1f4775155d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9920, "upload_time": "2016-05-27T10:43:37", "url": "https://files.pythonhosted.org/packages/55/e4/9f413f46e96803c0cac2d55f832fa0310afbb9c8df25c78c21aab64df293/cursed-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "920def88af1d78aab8929d33bec7b984", "sha256": "c803807df30379db46fd490c8f3ec9bc6468a1bbce3c0e50f2f06d3509d2c618" }, "downloads": -1, "filename": "cursed-0.1.7.tar.gz", "has_sig": false, "md5_digest": "920def88af1d78aab8929d33bec7b984", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9941, "upload_time": "2016-05-29T05:17:59", "url": "https://files.pythonhosted.org/packages/86/1d/9571f10bd17681085ea6e74cec599bfb841391094a1e970221ea1208801e/cursed-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "fef7ed0d9e1cf6c7f34765facd7a3da5", "sha256": "1de2dcc7f5dac78d6bae8700b3bc0e05e11b4461ecbb457d908fcd15f70e7d7a" }, "downloads": -1, "filename": "cursed-0.1.8.tar.gz", "has_sig": false, "md5_digest": "fef7ed0d9e1cf6c7f34765facd7a3da5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13164, "upload_time": "2016-05-29T10:13:14", "url": "https://files.pythonhosted.org/packages/1e/81/73dcdd3875f3de854ab42210d8d0227ff8a7e9d0707e395cb805a1e20e92/cursed-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "fea9486198868bc697d7251736fe2fff", "sha256": "6c052a20f3c052bd1b36d73db7814cf8999593e4acc17002392e9c43bcd273bd" }, "downloads": -1, "filename": "cursed-0.1.9.tar.gz", "has_sig": false, "md5_digest": "fea9486198868bc697d7251736fe2fff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13364, "upload_time": "2016-06-01T00:52:05", "url": "https://files.pythonhosted.org/packages/f2/cd/79b0105534883ce48c2abb38ec172095e6ba9e130a11340cd16be14e43fe/cursed-0.1.9.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "bb2fd1fb6fa06a1298756c625b44df2e", "sha256": "7ce2c32bccfe59f4f3e0fe70eb5f1881ed08ab0cd1ee39c115211b7f6f0dd61c" }, "downloads": -1, "filename": "cursed-0.2.0.tar.gz", "has_sig": false, "md5_digest": "bb2fd1fb6fa06a1298756c625b44df2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15032, "upload_time": "2016-06-01T09:53:14", "url": "https://files.pythonhosted.org/packages/b1/51/d9a37d5df91e28fe80cc658a5aa223bb455d17c64ad3faa3dbe8906710b9/cursed-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "97c86c2dde4edb6b29dbbd423ab256c9", "sha256": "67f444b18e07c01c32789458cd4792caf22782efb75ca950d4800e35fe90d047" }, "downloads": -1, "filename": "cursed-0.2.1.tar.gz", "has_sig": false, "md5_digest": "97c86c2dde4edb6b29dbbd423ab256c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15319, "upload_time": "2018-07-21T08:05:47", "url": "https://files.pythonhosted.org/packages/af/44/dfd89e7ffc106d4f8eba510c7a1fcabb3b7afaefade64162439b7a651278/cursed-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "97c86c2dde4edb6b29dbbd423ab256c9", "sha256": "67f444b18e07c01c32789458cd4792caf22782efb75ca950d4800e35fe90d047" }, "downloads": -1, "filename": "cursed-0.2.1.tar.gz", "has_sig": false, "md5_digest": "97c86c2dde4edb6b29dbbd423ab256c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15319, "upload_time": "2018-07-21T08:05:47", "url": "https://files.pythonhosted.org/packages/af/44/dfd89e7ffc106d4f8eba510c7a1fcabb3b7afaefade64162439b7a651278/cursed-0.2.1.tar.gz" } ] }