{ "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", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Internet :: WWW/HTTP :: Browsers" ], "description": "The Problem\n===========\n\nOn Linux, after a crash, or a re-login, Firefox and Chrome can restore their\nprevious windows' contents and positions. However they do not normally\nrestore these windows in the different workspaces/desktops that you\nmay be using.\n\nIf the desktop manager implements workspaces by using offsets (wider or\nhigher than the desktop resolution) restoration works as offsets \"push\" the\nwindow to the right workspace on restoration. Such a workspace setup often\nimplies you see a window that you moveover the edge of one workspace show up\non the next one. KDE seems to have used such a scheme in the period\n2010-2013.\n\nBrowsers would need to be `EWMH\n`_ aware, which\nthey currently aren't.\n\nA partial solution\n==================\n\nBut browser windows usually have the name of the page\nvisited in the title, which makes instances of the browser windows relatively\nuniquely identifiable. Based on that you can save the state of the browser\nwindows in a file, and restore windows with matching titles to the original\nworkspace.\n\nThis program will not work correctly if a browser window has the same title\non multiple workspaces and only has differing secondary tabs. If two, single\ntab windows have the same title, they probably point to the same URL, and in\nthat case which one gets restored to what workspace is less important (unless\nthe history makes a difference).\n\nInstallation\n============\n\nFirst, make sure your linux version has ``wmctrl`` installed.\n\nYou can use ``pip`` to install the program::\n\n pip install bws\n\nYou can also install the\n`configobj `_ library\n(with ``pip``) and directly download and use the main Python file.\n\nUsage\n=====\n\nRun ``bws save`` to save the current browser windows, ``bws restore``\nto restore the latest saved setup. Before restoring using ``bws\nrestore``, reopen the browser windows and select [Restore] as\nnecessary.\n\nChrome needs to be configured to allow restoring by selecting \"Continue where\nyou left off\", in the `settings menu\n`_. Firefox always seems to ask\nwhen a crash occured, but you can also explicitly `set the preferences\n`_ to \"Show my windows and tabs from last time\"\n\nConfiguration\n=============\n\nThe program keeps configuration defaults and restore information in (by\ndefault) ``~/.config/bws`` in ``bws.ini`` resp. ``*.bws`` files. Multiple\nrestore settings are kept (which might be a privacy issue for you), and ``bws list``\nwill show you which ones (with a date-time-stamp). ``bws restore`` can take\nan argument to select a specific \"save\"\"\n\nThe config file allows to expand the patterns that are matched on where\n``/proc/PID/exe`` points to, to identify the windows for which information\nneeds saving. A minimum number of windows can be specified that are necessary\nfor restoring (in the configuration file or on the commandline; the\ncommandline overrules the configuration file). This minimum prevents saves of\nbrowser windows when a single window is open asking for confirmation to\nrestore previously opened windows.\n\nChrome\n------\n\nChrome's executable used to be called ``chromium-browser`` and that is what you find \nin config files of pre-0.3.3 installations. You might want to upgrade and either\nremove the ``bws.ini`` file (so it will be regenerated), or make the chrome entry read::\n\n [br-chrome]\n basenamestart = chromium-browser, chrome\n\n\nCron\n====\n\nI run ``bws`` from crontab file every five minutes like this::\n\n */5 * * * * DISPLAY=:0 /home/anthon/.venv/27/bin/bws save --check\n\nthe ``--check`` only works if the file specified with ``--unlock-file`` exists. This\ndefaults to ``/tmp/bws.restored`` (which is on a temporary filesystem).\n\nIssuing ``bws restore`` removes this unlock file, unless you specify `--unlock`, which I do\non the last run, after Firefox has reloaded all pages, and restoring is complete..\n\n\nToDo\n====\n\n- check windows position for multiple occuring same strings (assuming positions\n differ, this gives additional info for workspace determination)\n\n----\n\nFirefox\n-------\nhttps://bugzilla.mozilla.org/show_bug.cgi?id=372650\nhttps://bugs.launchpad.net/ubuntu/+source/firefox/+bug/684982\n\nChrome\n------\nhttps://code.google.com/p/chromium/issues/detail?id=18596\nhttps://groups.google.com/a/chromium.org/forum/#!topic/chromium-discuss/h8tY-p-gXIE\n\nKDE used to work\n----------------\nhttps://code.google.com/p/chromium/issues/detail?id=297864", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/ruamel/bws", "keywords": "browser multiple workspace restore", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "ruamel.bws", "package_url": "https://pypi.org/project/ruamel.bws/", "platform": "", "project_url": "https://pypi.org/project/ruamel.bws/", "project_urls": { "Homepage": "https://bitbucket.org/ruamel/bws" }, "release_url": "https://pypi.org/project/ruamel.bws/0.3.3/", "requires_dist": null, "requires_python": "", "summary": "browser restore to workspace", "version": "0.3.3" }, "last_serial": 4428862, "releases": { "0.1.3": [ { "comment_text": "", "digests": { "md5": "55d1a56a06bf929b5e3c5bd04ee78b38", "sha256": "633a3bc9321e9ead229ebcb2321db7390254587ef02648fbe2a0ae8e48d14f65" }, "downloads": -1, "filename": "ruamel.bws-0.1.3.tar.gz", "has_sig": false, "md5_digest": "55d1a56a06bf929b5e3c5bd04ee78b38", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14765, "upload_time": "2014-09-28T17:46:10", "url": "https://files.pythonhosted.org/packages/71/03/746e4f7f8ac76ac8e74c7b99d386311b38850c7f51594051ad6390ce2c05/ruamel.bws-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "f4196440ccd745f1a0982ff889cc4f6b", "sha256": "76063c1102aa661f87c3d6598f5fb11ff4dda13769bfa567c66d5a025ed63558" }, "downloads": -1, "filename": "ruamel.bws-0.1.4.tar.gz", "has_sig": false, "md5_digest": "f4196440ccd745f1a0982ff889cc4f6b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15492, "upload_time": "2015-01-15T13:08:27", "url": "https://files.pythonhosted.org/packages/a4/cd/37b8343c2b72b5c957547875bc7b122d854efcc511002e9ee8a8930abd1a/ruamel.bws-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "36cc4080253870b788529c857fed29ad", "sha256": "0fbcb1456478696cf0a5eb7e971a2374f4d05c7f25dfa940032aea33ae2443f9" }, "downloads": -1, "filename": "ruamel.bws-0.1.5.tar.gz", "has_sig": false, "md5_digest": "36cc4080253870b788529c857fed29ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15501, "upload_time": "2015-08-27T08:41:33", "url": "https://files.pythonhosted.org/packages/0b/88/1509184091245cd8b726ce7c80c40ead0ada775fff5b3a9a494fae7cb3be/ruamel.bws-0.1.5.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "f81c14fad520e5602dc0a2c0552be256", "sha256": "d70af17ea95194e50a8bb18f0236824d28012fd5809889beff43ca22c059bb6c" }, "downloads": -1, "filename": "ruamel.bws-0.2.3.tar.gz", "has_sig": false, "md5_digest": "f81c14fad520e5602dc0a2c0552be256", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20585, "upload_time": "2016-01-08T11:37:46", "url": "https://files.pythonhosted.org/packages/73/2f/c4842891f40a513faddab6dbffc1405376818ae7af7035e9f235b904d64b/ruamel.bws-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "86c40ef6cbc5001b2d7966496e2ec94d", "sha256": "b4a0ded5c1b175d0219c6ea580ea7d31b0c434d9c4f844ed338de56a79005d93" }, "downloads": -1, "filename": "ruamel.bws-0.2.4.tar.gz", "has_sig": false, "md5_digest": "86c40ef6cbc5001b2d7966496e2ec94d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20575, "upload_time": "2016-01-09T16:13:19", "url": "https://files.pythonhosted.org/packages/54/73/2fa1fb72d347b9942f7d7a84624231fc6fb1b4b40e348895c7b0eba85b53/ruamel.bws-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "16d5d599c117880436632da3c575cd51", "sha256": "04be14b81742945fb6579f2a2ed5ca1dfcec217328d7d3a2e3e2e7dc302c421e" }, "downloads": -1, "filename": "ruamel.bws-0.2.5.tar.gz", "has_sig": false, "md5_digest": "16d5d599c117880436632da3c575cd51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21749, "upload_time": "2016-03-19T10:16:49", "url": "https://files.pythonhosted.org/packages/12/7b/a105216bb1b716367885f8d9011e34733ade545d94762f7c7298a88abcd8/ruamel.bws-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "a2af367bd04e811ab1bfb23fcf6022b8", "sha256": "e620daba3c07905f1be119e21d23a036e4e0be779c8623ba3492152639d0502e" }, "downloads": -1, "filename": "ruamel.bws-0.2.6.tar.gz", "has_sig": false, "md5_digest": "a2af367bd04e811ab1bfb23fcf6022b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21798, "upload_time": "2016-03-20T06:39:34", "url": "https://files.pythonhosted.org/packages/d7/c9/e188469a32e3d5e906694727e555f13bb96a64772c4be1091f19c198a176/ruamel.bws-0.2.6.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "3222a4da452edec32e5f18b587673173", "sha256": "63e8a2dc6ad4652c9e3a56ad0e97f5a9b0f15beebb44fc25838aea3692b9da41" }, "downloads": -1, "filename": "ruamel.bws-0.3.0.tar.gz", "has_sig": false, "md5_digest": "3222a4da452edec32e5f18b587673173", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22033, "upload_time": "2016-12-10T21:40:15", "url": "https://files.pythonhosted.org/packages/1a/7d/eff699d2ed6ba9096743bd8c6de70e72db4ebc92f51c156bfbb7617d147c/ruamel.bws-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "7c9b15ef9af5e8f42fc5f41643a516e0", "sha256": "195dc3fe63345d81c42439f090b0d0afdd0b86fd651fad2da41a4bb160f68dc1" }, "downloads": -1, "filename": "ruamel.bws-0.3.1.tar.gz", "has_sig": false, "md5_digest": "7c9b15ef9af5e8f42fc5f41643a516e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22089, "upload_time": "2016-12-11T07:22:09", "url": "https://files.pythonhosted.org/packages/4d/28/eab87bab547d02a52293fcbb820e0319d7e1e7a173f184cdc19868f140d6/ruamel.bws-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "3e8c924795ea6db6c7fb4b373ab3d926", "sha256": "50c78f96d7badb4697e5d926b9437556501ffc14153aa1cccbb8be9ab0b252a4" }, "downloads": -1, "filename": "ruamel.bws-0.3.2.tar.gz", "has_sig": false, "md5_digest": "3e8c924795ea6db6c7fb4b373ab3d926", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22137, "upload_time": "2016-12-27T16:30:33", "url": "https://files.pythonhosted.org/packages/03/71/2f9c0e07981cabe0b2918aeec40afd442e0398ef342d07465b2a095619d9/ruamel.bws-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "76b4ec515f25fac9c396725961432b14", "sha256": "a0afcf36850f3fff23f39ca3d2bc7af23af523398f8a2e6af2dda702b8b8e6fd" }, "downloads": -1, "filename": "ruamel.bws-0.3.3.tar.gz", "has_sig": false, "md5_digest": "76b4ec515f25fac9c396725961432b14", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25001, "upload_time": "2018-10-29T19:41:19", "url": "https://files.pythonhosted.org/packages/38/d6/ffaefcb9bcb37d85f179c86f31f70b2d4b2b105e6ad04c499e549383ed56/ruamel.bws-0.3.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "76b4ec515f25fac9c396725961432b14", "sha256": "a0afcf36850f3fff23f39ca3d2bc7af23af523398f8a2e6af2dda702b8b8e6fd" }, "downloads": -1, "filename": "ruamel.bws-0.3.3.tar.gz", "has_sig": false, "md5_digest": "76b4ec515f25fac9c396725961432b14", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25001, "upload_time": "2018-10-29T19:41:19", "url": "https://files.pythonhosted.org/packages/38/d6/ffaefcb9bcb37d85f179c86f31f70b2d4b2b105e6ad04c499e549383ed56/ruamel.bws-0.3.3.tar.gz" } ] }