{ "info": { "author": "Jonathan Haylett", "author_email": "jonathan@haylett.dev", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3" ], "description": "# i3-resurrect\n\nA simple but flexible solution to saving and restoring i3 workspaces\n\n[![Build Status](https://travis-ci.org/JonnyHaystack/i3-resurrect.svg?branch=master)](https://travis-ci.org/JonnyHaystack/i3-resurrect)\n[![Coverage Status](https://coveralls.io/repos/github/JonnyHaystack/i3-resurrect/badge.svg)](https://coveralls.io/github/JonnyHaystack/i3-resurrect)\n[![GitHub issues](https://img.shields.io/github/issues/JonnyHaystack/i3-resurrect)](https://github.com/JonnyHaystack/i3-resurrect/issues)\n![GitHub pull requests](https://img.shields.io/github/issues-pr/JonnyHaystack/i3-resurrect)\n![PyPI - Version](https://img.shields.io/pypi/v/i3-resurrect)\n\n## Table of Contents\n\n* [Introduction](#introduction)\n* [Background](#background)\n* [Getting Started](#getting-started)\n * [Requirements](#requirements)\n * [Installation](#installation)\n * [Usage](#usage)\n * [Configuration](#configuration)\n* [Contributing](#contributing)\n* [Contributors](#contributors)\n* [License](#license)\n\n## Introduction\n\ni3-resurrect is a program which can save and restore the layout and running\nprograms in your i3 workspaces.\n\nLayouts are saved by using i3ipc to take necessary information from the\nworkspace tree and write it to a JSON file.\n\nPrograms are saved by looking up each process in the workspace and writing their\n`cmdline` (the command used to launch the program) and `cwd` (current working\ndirectory) to a JSON file.\n\nWhen restoring programs, Python's subprocess module is used to launch the saved\nprograms with the correct working directory.\n\nWhen restoring layouts, i3's built-in ability layout restoring functionality is\nused. This creates placeholder windows where each one will \"swallow\" any new\nwindow that matches specified criteria (window class, instance, title etc).\n\nxdotool is used to make i3 see existing windows as new windows.\nThis is necessary for matching by window title because the title must match\nwhen the window first appears and programs usually only update the title after\nthe window is created\n(see [here](https://i3wm.org/docs/layout-saving.html#_placeholders_using_window_title_matches_don_8217_t_swallow_the_window)\nfor more details).\n\n## Background\n\nThis project originated as a mixture of hacked together Python and bash scripts\nthat I wrote in order to be able to quickly save and load workspaces on the fly.\n\nI hate having to reboot my computer because it disrupts everything I have open\n(which tends to be a lot).\n\nTo cope with this problem, I try to make it as easy as possible for myself to\nget everything back to its pre-reboot state.\n\nI quickly found out about the `i3-save-tree` utility and i3's `append-layout`\ncommand, but these weren't much use to me on their own, as you are expected to\ncustomise a layout manually after saving it and relaunch all your programs\nmanually when you restore the layout.\n\nMy solution was to create a script that would extract just the bits from\ni3-save-tree that are needed, and use the\n[i3ipc](https://github.com/acrisci/i3ipc-python),\n[wmctrl](https://bitbucket.org/antocuni/wmctrl), and\n[psutil](https://github.com/giampaolo/psutil) Python libraries to obtain the\ncommands necessary to launch the programs in a saved workspace.\n\nSince I decided to release this publicly, I have improved the standard of the\ncode a great deal and gotten rid of the hacky bash parts.\nThe code is all Python now, and i3-save-tree is no longer needed as I have\nreimplemented it in Python.\n\n## Getting Started\n\n### Requirements\n\n- Python 3.6\n- i3\n- wmctrl\n- xdotool\n\n### Installation\n\n#### From the AUR using yay (recommended for Arch Linux users)\n```\nyay -S i3-resurrect-git\n```\n\n#### From PyPI (recommended for everyone else)\n\n```\npip3 install --user --upgrade i3-resurrect\n```\n\nMake sure `~/.local/bin` is in your PATH environment variable.\n\n#### Manual\n\nObtain source code\n```\ngit clone git@github.com:JonnyHaystack/i3-resurrect.git\n```\n\nInstall locally using pip\n```\ncd i3-resurrect\npip3 install --user .\n```\n\n### Usage\n\n#### Command line\n\nFull command line documentation:\n```\nUsage: i3_resurrect.py save [OPTIONS]\n\n Save an i3 workspace's layout and running programs to a file.\n\nOptions:\n -w, --workspace TEXT The workspace to save.\n [default: current workspace]\n -d, --directory DIRECTORY The directory to save the workspace to.\n [default: ~/.i3/i3-resurrect]\n -s, --swallow TEXT The swallow criteria to use.\n [options: class,instance,title,window_role]\n [default: class,instance]\n --layout-only Only save layout.\n --programs-only Only save running programs.\n\n\nUsage: i3_resurrect.py restore [OPTIONS]\n\n Restore i3 workspace layout and programs.\n\nOptions:\n -w, --workspace TEXT The workspace to restore.\n [default: current workspace]\n -d, --directory DIRECTORY The directory to restore the workspace from.\n [default: ~/.i3/i3-resurrect]\n --layout-only Only restore layout.\n --programs-only Only restore running programs.\n```\n\nBasic usage, matching only window class/instance:\n```\n# Save workspace '1'\ni3-resurrect save -w 1\n\n# Restore workspace '1'\ni3-resurrect restore -w 1\n```\n\nMore accurate layout restoring by matching title:\n```\n# Save workspace '1'\ni3-resurrect save -w 1 --swallow=class,instance,title\n\n# Restore workspace '1' programs\ni3-resurrect restore -w 1 --programs-only\n\n# Apply workspace '1' layout\ni3-resurrect restore -w 1 --layout-only\n```\nWhen matching windows by title, the programs must be restored before the layout,\nbecause the title often won't match when the window first appears.\n\nWhen restoring a layout, i3-resurrect uses xdotool to unmap and remap every\nwindow on the workspace which causes i3 to see them as new windows so they will\nbe swallowed by the placeholder windows.\n\n#### Example configuration in i3\n\nA very basic setup without window title matching:\n```\nset $i3_resurrect i3-resurrect\n\n# Save workspace mode.\nmode \"save\" {\n bindsym 1 exec $i3_resurrect save -w 1\n bindsym 2 exec $i3_resurrect save -w 2\n bindsym 3 exec $i3_resurrect save -w 3\n bindsym 4 exec $i3_resurrect save -w 4\n bindsym 5 exec $i3_resurrect save -w 5\n bindsym 6 exec $i3_resurrect save -w 6\n bindsym 7 exec $i3_resurrect save -w 7\n bindsym 8 exec $i3_resurrect save -w 8\n bindsym 9 exec $i3_resurrect save -w 9\n bindsym 0 exec $i3_resurrect save -w 0\n\n # Back to normal: Enter, Escape, or s\n bindsym Return mode \"default\"\n bindsym Escape mode \"default\"\n bindsym s mode \"default\"\n bindsym $mod+s mode \"default\"\n}\n\nbindsym $mod+s mode \"save\"\n\n# Restore workspace mode.\nmode \"restore\" {\n bindsym 1 exec $i3_resurrect restore -w 1\n bindsym 2 exec $i3_resurrect restore -w 2\n bindsym 3 exec $i3_resurrect restore -w 3\n bindsym 4 exec $i3_resurrect restore -w 4\n bindsym 5 exec $i3_resurrect restore -w 5\n bindsym 6 exec $i3_resurrect restore -w 6\n bindsym 7 exec $i3_resurrect restore -w 7\n bindsym 8 exec $i3_resurrect restore -w 8\n bindsym 9 exec $i3_resurrect restore -w 9\n bindsym 0 exec $i3_resurrect restore -w 0\n\n # Back to normal: Enter, Escape, or n\n bindsym Return mode \"default\"\n bindsym Escape mode \"default\"\n bindsym n mode \"default\"\n bindsym $mod+n mode \"default\"\n}\n\nbindsym $mod+n mode \"restore\"\n```\n\nA more advanced setup where windows are matched by title:\n```\nset $i3_resurrect i3-resurrect\n\n# Save workspace mode.\nmode \"save\" {\n bindsym 1 exec \"$i3_resurrect save -w 1 --swallow=class,instance,title\"\n bindsym 2 exec \"$i3_resurrect save -w 2 --swallow=class,instance,title\"\n bindsym 3 exec \"$i3_resurrect save -w 3 --swallow=class,instance,title\"\n bindsym 4 exec \"$i3_resurrect save -w 4 --swallow=class,instance,title\"\n bindsym 5 exec \"$i3_resurrect save -w 5 --swallow=class,instance,title\"\n bindsym 6 exec \"$i3_resurrect save -w 6 --swallow=class,instance,title\"\n bindsym 7 exec \"$i3_resurrect save -w 7 --swallow=class,instance,title\"\n bindsym 8 exec \"$i3_resurrect save -w 8 --swallow=class,instance,title\"\n bindsym 9 exec \"$i3_resurrect save -w 9 --swallow=class,instance,title\"\n bindsym 0 exec \"$i3_resurrect save -w 10 --swallow=class,instance,title\"\n\n # Back to normal: Enter, Escape, or s\n bindsym Return mode \"default\"\n bindsym Escape mode \"default\"\n bindsym s mode \"default\"\n bindsym $mod+s mode \"default\"\n}\n\nbindsym $mod+s mode \"save\"\n\n# Restore workspace mode.\nmode \"restore\" {\n bindsym 1 exec \"$i3_resurrect restore -w 1 --programs-only\"\n bindsym 2 exec \"$i3_resurrect restore -w 2 --programs-only\"\n bindsym 3 exec \"$i3_resurrect restore -w 3 --programs-only\"\n bindsym 4 exec \"$i3_resurrect restore -w 4 --programs-only\"\n bindsym 5 exec \"$i3_resurrect restore -w 5 --programs-only\"\n bindsym 6 exec \"$i3_resurrect restore -w 6 --programs-only\"\n bindsym 7 exec \"$i3_resurrect restore -w 7 --programs-only\"\n bindsym 8 exec \"$i3_resurrect restore -w 8 --programs-only\"\n bindsym 9 exec \"$i3_resurrect restore -w 9 --programs-only\"\n bindsym 0 exec \"$i3_resurrect restore -w 10 --programs-only\"\n\n bindsym $mod+1 exec \"$i3_resurrect restore -w 1 --layout-only\"\n bindsym $mod+2 exec \"$i3_resurrect restore -w 2 --layout-only\"\n bindsym $mod+3 exec \"$i3_resurrect restore -w 3 --layout-only\"\n bindsym $mod+4 exec \"$i3_resurrect restore -w 4 --layout-only\"\n bindsym $mod+5 exec \"$i3_resurrect restore -w 5 --layout-only\"\n bindsym $mod+6 exec \"$i3_resurrect restore -w 6 --layout-only\"\n bindsym $mod+7 exec \"$i3_resurrect restore -w 7 --layout-only\"\n bindsym $mod+8 exec \"$i3_resurrect restore -w 8 --layout-only\"\n bindsym $mod+9 exec \"$i3_resurrect restore -w 9 --layout-only\"\n bindsym $mod+0 exec \"$i3_resurrect restore -w 10 --layout-only\"\n\n # Back to normal: Enter, Escape, or n\n bindsym Return mode \"default\"\n bindsym Escape mode \"default\"\n bindsym n mode \"default\"\n bindsym $mod+n mode \"default\"\n}\n\nbindsym $mod+n mode \"restore\"\n```\n\nExample of usage with the second configuration:\n\n[![Example of usage with the second configuration](https://i.imgur.com/mi9Uml8.gif)](https://gfycat.com/selfreliantdarkkoodoo)\n\n### Configuration\n\nThe config file should be located at `~/.config/i3-resurrect/config.json`.\nA default config file will be created when you first run i3-resurrect.\n\n#### Window command mappings\n\nIn the case of a window where the process `cmdline` is not the same as the\ncommand you must run to launch that program, you can add an explicit window\ncommand mapping in the config file.\n\nFor example, gnome-terminal's process is gnome-terminal-server, but we need to\nlaunch it with the command `gnome-terminal`. To get this working, you would put\nthe following in your config file:\n\n```\n{\n ...\n \"window_command_mappings\": [\n {\n \"class\": \"Gnome-terminal\",\n \"command\": \"gnome-terminal\"\n }\n ]\n ...\n}\n```\n\nAnother example use case is where:\n- You have multiple windows for a single instance of an application\n- When restoring, you only want one instance of the program to be launched for\neach instance of the application's main window\n\nIn this scenario, you could create one rule that by default maps the\napplication's window class to have no command, and another that sets the command\nif it also matches a certain title:\n\n```\n{\n ...\n \"window_command_mappings\": [\n ...\n {\n \"class\": \"Some-program\",\n },\n {\n \"class\": \"Some-program\",\n \"title\": \"Main window's title\"\n }\n ...\n ]\n ...\n}\n```\n\nHint:\nIf you need to find out a window's class/instance, type `xprop | grep WM_CLASS`\nin a terminal and then click on the desired window.\n\n#### Terminals\n\nFor terminal emulator windows, we must get the working directory from the\nfirst subprocess (usually this will be your shell) instead of the window's root\nprocess (the terminal emulator).\n\ni3-resurrect deals with this by allowing you to specify a list of terminal\nemulator window classes in your config file.\n\nFor example, if you use both Alacritty and gnome-terminal and you want their\nworking directories to be restored correctly, you would put the following in\nyour config file:\n\n```\n{\n ...\n \"terminals\": [\n \"Gnome-terminal\",\n \"Alacritty\"\n ]\n ...\n}\n```\n\nSome examples are included in the default config. If you would like me to add\nmore command mappings or terminals to the default config, please open an issue\nfor it.\n\n#### Per window swallow criteria\n\nIt is also possible to configure swallow criteria on a per window basis, which\nwill override the criteria set by the `--swallow` command line parameter.\n\nExample use case:\n- I usually want to include the window title in the swallow criteria to more\naccurately restore layouts\n- Among other programs that I use, Ario (an mpd client) always has the currently\nplaying song in the window title\n- This makes matching the layout by window title inconvenient, so I want to have\nArio always be matched by only the window class/instance\n\nThis can be achieved by putting the following in your config file:\n\n```\n{\n ...\n \"window_swallow_criteria\": {\n \"Ario\": [\"class\", \"instance\"]\n }\n ...\n}\n```\n\n## Contributing\n\nPlease read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us.\n\n### Versioning\n\nWe use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/JonnyHaystack/i3-resurrect/tags).\n\n## Built With\n\n* [Click](https://github.com/pallets/click) - Used to create the command line interface\n* [i3ipc](https://github.com/acrisci/i3ipc-python) - Used to get/build the workspace tree\n* [wmctrl](https://bitbucket.org/antocuni/wmctrl) - Used to get the PIDs of the windows that are retrieved using i3ipc\n* [psutil](https://github.com/giampaolo/psutil) - Used to get the cmdline and cwd of each process\n* [xdotool](https://www.semicomplete.com/projects/xdotool/) - Used to unmap and remap windows\n\n## Contributors\n\n* **Jonathan Haylett** - *Creator* - [@JonnyHaystack](https://github.com/JonnyHaystack)\n\nSee also the list of [contributors](https://github.com/JonnyHaystack/i3-resurrect/contributors) who participated in this project.\n\n### Acknowledgments\n\n* [@pallets](https://github.com/pallets) - for Click\n* [@acrisci](https://github.com/acrisci) - for the i3ipc Python library\n* [@antocuni](https://bitbucket.org/antocuni) - for the wmctrl Python library\n* [@giampaolo](https://github.com/giampaolo) - for the psutil Python library\n* [@jordansissel](https://github.com/jordansissel) - for xdotool\n* Everyone who has worked on i3\n\n## Related projects\n\nFor those interested, other excellent software I use to get things up and running quickly includes:\n- [tmux-resurrect](https://github.com/tmux-plugins/tmux-resurrect) - which obviously also inspired\nthe name of this project\n- [tmux-continuum](https://github.com/tmux-plugins/tmux-continuum) - an excellent companion to\ntmux-resurrect\n- [qutebrowser](https://github.com/qutebrowser/qutebrowser) - which has excellent session\nmanagement, especially if you create bindings for saving and loading individual windows\n\n## License\n\nThis project is licensed under the GNU GPL Version 3 - see the [LICENSE](LICENSE) file for details\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/JonnyHaystack/i3-resurrect", "keywords": "", "license": "GNU GPL Version 3", "maintainer": "", "maintainer_email": "", "name": "i3-resurrect", "package_url": "https://pypi.org/project/i3-resurrect/", "platform": "", "project_url": "https://pypi.org/project/i3-resurrect/", "project_urls": { "Homepage": "https://github.com/JonnyHaystack/i3-resurrect" }, "release_url": "https://pypi.org/project/i3-resurrect/1.3.2/", "requires_dist": [ "Click", "wmctrl-python3", "i3ipc", "psutil" ], "requires_python": ">=3.6", "summary": "A simple but flexible solution to saving and restoring i3 workspace layouts", "version": "1.3.2" }, "last_serial": 5811808, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "fe0907cb92ddd0c54e8a10f8553924da", "sha256": "9a3af40ffd8918f5820d74ac5aeba590b4bc4b5c1d59d1b5d4e0876edc7489e3" }, "downloads": -1, "filename": "i3_resurrect-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fe0907cb92ddd0c54e8a10f8553924da", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18317, "upload_time": "2019-07-06T14:51:57", "url": "https://files.pythonhosted.org/packages/81/76/c306d7f376cb95f3645902924c8e830e16376db50d4910168d79b5c142ea/i3_resurrect-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5b1c4c282dc07479469b9da0c9429386", "sha256": "2b224e8ceddb2ee78a7d27690c6435bbf5f72b6d82869a8b5554736e7cf22d19" }, "downloads": -1, "filename": "i3-resurrect-1.0.0.tar.gz", "has_sig": false, "md5_digest": "5b1c4c282dc07479469b9da0c9429386", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5991, "upload_time": "2019-07-06T14:52:00", "url": "https://files.pythonhosted.org/packages/9e/ea/0bad9dff0caead79ffcb94416eea685183a1f4b37d185abeae6b5552f1e3/i3-resurrect-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "9557f12cf95b65240f3f8ccddb11cddb", "sha256": "1f7fbc91a1df693ab97905015fd943af9f4bf269fbcca203093468b7160b8a58" }, "downloads": -1, "filename": "i3_resurrect-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9557f12cf95b65240f3f8ccddb11cddb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18397, "upload_time": "2019-07-06T15:39:57", "url": "https://files.pythonhosted.org/packages/7c/89/1c94d1d0facb1391eb22c6ee834c3df53cff86c5298538831fb3286ba1d0/i3_resurrect-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "326b72b6bafd2cd21bd557e885e8e220", "sha256": "ff5eef1a179f22e2b177b76f333159e26da7beeac196d20d3387cedf6974bd41" }, "downloads": -1, "filename": "i3-resurrect-1.0.1.tar.gz", "has_sig": false, "md5_digest": "326b72b6bafd2cd21bd557e885e8e220", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6104, "upload_time": "2019-07-06T15:39:59", "url": "https://files.pythonhosted.org/packages/e6/05/4a62cfaaef6da666f62ee1ecfb821c64cd7f9622715cb47cbd73548cac56/i3-resurrect-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "7c1fce1ff158df5d4f8fd596efaaaaa2", "sha256": "97826155dc1ff098fed76d6022ef5ff4f1f8f5843384d6be2341cc30e72c25dc" }, "downloads": -1, "filename": "i3_resurrect-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "7c1fce1ff158df5d4f8fd596efaaaaa2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18452, "upload_time": "2019-07-06T15:51:52", "url": "https://files.pythonhosted.org/packages/85/a7/837b13d5809a6db8917ed0f62ee668e2fa8dc9c2626a81d27cdfdfb9362f/i3_resurrect-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9bfa013b5a59eeaff22018ee1bed2361", "sha256": "89309c8d6385a9933b66a3f5cf0b4ecd5960ccf896fee4b8c635f758f1752454" }, "downloads": -1, "filename": "i3-resurrect-1.0.2.tar.gz", "has_sig": false, "md5_digest": "9bfa013b5a59eeaff22018ee1bed2361", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6185, "upload_time": "2019-07-06T15:51:53", "url": "https://files.pythonhosted.org/packages/f4/6d/48230e47b5ab443c91f1346b1694321958112a6a8debaebf723e7fba48f3/i3-resurrect-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "355b9a04c2392d929ecb0834f06858ad", "sha256": "e27f2d28ee2e6594c17404891a2270f1ae9508027ee30517626fbfc59bd8d135" }, "downloads": -1, "filename": "i3_resurrect-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "355b9a04c2392d929ecb0834f06858ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18596, "upload_time": "2019-07-08T12:22:10", "url": "https://files.pythonhosted.org/packages/7c/97/7d8ed9c08ad5e7ad5c1f1fe1dd8912b908794afd12392a717bfb4f2c58d9/i3_resurrect-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f007f4ec42b47e372fb5ffd26723809", "sha256": "c088777f6497d744fefab25e00512da43eebdffb0dc92e8628deaa2dbd6494bd" }, "downloads": -1, "filename": "i3-resurrect-1.0.3.tar.gz", "has_sig": false, "md5_digest": "6f007f4ec42b47e372fb5ffd26723809", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6374, "upload_time": "2019-07-08T12:22:11", "url": "https://files.pythonhosted.org/packages/6d/7f/c19ba4dc1e5d6ba3528baa114ac9452cbdf0fb8ed31d536d281e0333c4dd/i3-resurrect-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "73be45bfcdde4a767f9c168d2beac871", "sha256": "a699241c87e722dac9e12ff064b472dac146f340a9a39b3c2129c79c911e9b33" }, "downloads": -1, "filename": "i3_resurrect-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "73be45bfcdde4a767f9c168d2beac871", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18561, "upload_time": "2019-07-09T13:10:33", "url": "https://files.pythonhosted.org/packages/42/19/4a3f03ea625b07853ea7d27c4bb9f173e42ed9adcc110b89dfa6a74a16dc/i3_resurrect-1.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef6acf26e60900064774ca0cef2c29b1", "sha256": "14a11d8baa5fe6ec8463f2137c1a0a894dd0be51706787afafc2235d933e9ea9" }, "downloads": -1, "filename": "i3-resurrect-1.0.4.tar.gz", "has_sig": false, "md5_digest": "ef6acf26e60900064774ca0cef2c29b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6308, "upload_time": "2019-07-09T13:10:35", "url": "https://files.pythonhosted.org/packages/d3/3f/da2dadb1ffef228d8cc3aebf2bd6f6c6d5015cefc5efde1050e7445b956e/i3-resurrect-1.0.4.tar.gz" } ], "1.0.4.post2": [ { "comment_text": "", "digests": { "md5": "7811cf0487bac92d628993a884425319", "sha256": "4782e996b4847cffe4c83fce867f52db4a303d42156f11ee5578e8a21c74a026" }, "downloads": -1, "filename": "i3_resurrect-1.0.4.post2-py3-none-any.whl", "has_sig": false, "md5_digest": "7811cf0487bac92d628993a884425319", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18773, "upload_time": "2019-07-13T12:58:37", "url": "https://files.pythonhosted.org/packages/b1/59/3817c0d7f68bc24053f6836c541dae2e664580e0073d25257676ffc49cab/i3_resurrect-1.0.4.post2-py3-none-any.whl" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "20c5fc88d1fd80c53bee96b9b5ec1147", "sha256": "73bd615c85ba0cbfc33918777e40bc9c7ad6378e4d57a42dd3fbbbe457192f8f" }, "downloads": -1, "filename": "i3_resurrect-1.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "20c5fc88d1fd80c53bee96b9b5ec1147", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19374, "upload_time": "2019-07-13T13:03:46", "url": "https://files.pythonhosted.org/packages/8e/95/a0e757af85595160fda3ebf0d2f9d68807d07f7287c261754fac055fec66/i3_resurrect-1.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bcd6f61c3c0e5adecd86251c4d6e379e", "sha256": "cb06249d508ccf7e64d727828dee64e6ed0a964c823174daea1ebe0ca56a5964" }, "downloads": -1, "filename": "i3-resurrect-1.0.5.tar.gz", "has_sig": false, "md5_digest": "bcd6f61c3c0e5adecd86251c4d6e379e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6923, "upload_time": "2019-07-13T13:03:48", "url": "https://files.pythonhosted.org/packages/55/ee/b77750bd613de9d482c66a5209cf5f62c01a8358e6b36e18a5c1f370d544/i3-resurrect-1.0.5.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "e5de4aa05b8cd9b194c5644032027d1e", "sha256": "a46cd0ff794b960741ad12d0c2a5208bd02afce6f40da265a42f857e9078813e" }, "downloads": -1, "filename": "i3_resurrect-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e5de4aa05b8cd9b194c5644032027d1e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19425, "upload_time": "2019-07-13T13:47:02", "url": "https://files.pythonhosted.org/packages/11/89/d7536255fad24cf1f73897f6663a8eb2007b4e0599d4c9bc85fe40ce2c10/i3_resurrect-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4a0c889ea47c3db67bec686140e415a7", "sha256": "e3db9b4c7ab3cba12a8cc33506bae2bd0aa8ae5218399fbcce450a24891e91a5" }, "downloads": -1, "filename": "i3-resurrect-1.1.0.tar.gz", "has_sig": false, "md5_digest": "4a0c889ea47c3db67bec686140e415a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6962, "upload_time": "2019-07-13T13:47:04", "url": "https://files.pythonhosted.org/packages/bf/a6/200387559d91df0c129384a2bb19ed42ddfb1cc56db51e7ec0343b5df856/i3-resurrect-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "a7a4d16707a121973aa08703f052ecf3", "sha256": "c57cf1ef2229ef7ac1d67da8974c2af987fbeccf01bd50ed7f46c10d434f00e3" }, "downloads": -1, "filename": "i3_resurrect-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a7a4d16707a121973aa08703f052ecf3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22183, "upload_time": "2019-07-20T00:46:01", "url": "https://files.pythonhosted.org/packages/a0/bd/443a69408ab21cfe8ee298758bc5114266f4a4352c6d0bf4405b62a64331/i3_resurrect-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cfbe43ae7754272e7fb44db195cde01b", "sha256": "c2fe080e2c0fe73910e485a9a62a2c013a5ef4fd88101e0cf3463dc4b7e5559d" }, "downloads": -1, "filename": "i3-resurrect-1.2.0.tar.gz", "has_sig": false, "md5_digest": "cfbe43ae7754272e7fb44db195cde01b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11945, "upload_time": "2019-07-20T00:46:03", "url": "https://files.pythonhosted.org/packages/d7/f9/20d10c9d93b9b306798dcabdaf54e982bd045b682d48cd1ed5e96bb70c88/i3-resurrect-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "ed54cfb4194b4ff285476a40d160d8b6", "sha256": "e73cd2956e23518be9d46d79af7e27a9cb8844983ef19ba2a2a8e894c53f721e" }, "downloads": -1, "filename": "i3_resurrect-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ed54cfb4194b4ff285476a40d160d8b6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 23831, "upload_time": "2019-08-05T00:33:29", "url": "https://files.pythonhosted.org/packages/87/46/62a5e59b236c257ff81a72e121b72a61883393ba11fb17b1322c1c66ba78/i3_resurrect-1.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e47195544c649281424ad60f507ff20b", "sha256": "09d7b8f59f348c1f8f965aa313315f17b8fb67ae0d2002cd13ed6c71b25033a1" }, "downloads": -1, "filename": "i3-resurrect-1.3.0.tar.gz", "has_sig": false, "md5_digest": "e47195544c649281424ad60f507ff20b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 15538, "upload_time": "2019-08-05T00:33:32", "url": "https://files.pythonhosted.org/packages/d4/5b/6e66843251bffb1313a6f75d68dd317053874a8cde5422baf71fc9960a43/i3-resurrect-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "92b5c45613975234023880f4ff6f3fcc", "sha256": "5edb35084a6fe244b409b4d665591192263c9768a7f72f0994b88e7f5006b2f0" }, "downloads": -1, "filename": "i3_resurrect-1.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "92b5c45613975234023880f4ff6f3fcc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 23851, "upload_time": "2019-08-05T00:50:36", "url": "https://files.pythonhosted.org/packages/2a/94/3d9c39b5cee82c1da938f67d61cb09f167fd2b0f6bb6d827bb6e103f65c6/i3_resurrect-1.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f7e7f05b1f12b4ad6bb757e95b3142f1", "sha256": "2a28cbb4e662558b487a0cfd754ace668642e8b18a78762635e81373271d74c0" }, "downloads": -1, "filename": "i3-resurrect-1.3.1.tar.gz", "has_sig": false, "md5_digest": "f7e7f05b1f12b4ad6bb757e95b3142f1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 15565, "upload_time": "2019-08-05T00:50:40", "url": "https://files.pythonhosted.org/packages/dd/a3/94d2dd1819dabeb8a79e2e11ac91ec51652301004f5ad7acf6660c9fecb8/i3-resurrect-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "880f3cf657106262a3a66604decce649", "sha256": "c58bafa00f4b28e1ac1d844289f13b6a85cd4c93c599d094e3d23d861fa8f6cb" }, "downloads": -1, "filename": "i3_resurrect-1.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "880f3cf657106262a3a66604decce649", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 23834, "upload_time": "2019-09-10T22:27:33", "url": "https://files.pythonhosted.org/packages/c1/a7/51b44f62b349ec98dfd878b5176f67809fe9bdc3e181a678b94eee737d7c/i3_resurrect-1.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4a866cc0b6d8b25a496acc695d39550f", "sha256": "ca5123633ecc48434437d6aac935d65c8c49f972e5cb7cf08cc3ab3aa5f21f0e" }, "downloads": -1, "filename": "i3-resurrect-1.3.2.tar.gz", "has_sig": false, "md5_digest": "4a866cc0b6d8b25a496acc695d39550f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 15594, "upload_time": "2019-09-10T22:27:35", "url": "https://files.pythonhosted.org/packages/bd/b6/56b7619e9f3040c0029c6e0d387ce2802c491826e321f528892dcb2cf91e/i3-resurrect-1.3.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "880f3cf657106262a3a66604decce649", "sha256": "c58bafa00f4b28e1ac1d844289f13b6a85cd4c93c599d094e3d23d861fa8f6cb" }, "downloads": -1, "filename": "i3_resurrect-1.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "880f3cf657106262a3a66604decce649", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 23834, "upload_time": "2019-09-10T22:27:33", "url": "https://files.pythonhosted.org/packages/c1/a7/51b44f62b349ec98dfd878b5176f67809fe9bdc3e181a678b94eee737d7c/i3_resurrect-1.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4a866cc0b6d8b25a496acc695d39550f", "sha256": "ca5123633ecc48434437d6aac935d65c8c49f972e5cb7cf08cc3ab3aa5f21f0e" }, "downloads": -1, "filename": "i3-resurrect-1.3.2.tar.gz", "has_sig": false, "md5_digest": "4a866cc0b6d8b25a496acc695d39550f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 15594, "upload_time": "2019-09-10T22:27:35", "url": "https://files.pythonhosted.org/packages/bd/b6/56b7619e9f3040c0029c6e0d387ce2802c491826e321f528892dcb2cf91e/i3-resurrect-1.3.2.tar.gz" } ] }