diff --git a/README.asciidoc b/README.asciidoc index d69e43b67..a9f4d8401 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -68,9 +68,9 @@ Requirements The following software and libraries are required to run qutebrowser: * http://www.python.org/[Python] 3.4 -* http://qt-project.org/[Qt] 5.2 or newer (5.3.1 recommended) +* http://qt-project.org/[Qt] 5.2.0 or newer (5.3.2 recommended) * QtWebKit -* http://www.riverbankcomputing.com/software/pyqt/intro[PyQt] 5.2 or newer +* http://www.riverbankcomputing.com/software/pyqt/intro[PyQt] 5.2.0 or newer (5.3.1 recommended) for Python 3 * https://pypi.python.org/pypi/setuptools/[pkg_resources/setuptools] * http://fdik.org/pyPEG/[pyPEG2] diff --git a/doc/BUGS b/doc/BUGS index b7075d2c1..53dcf7756 100644 --- a/doc/BUGS +++ b/doc/BUGS @@ -15,6 +15,7 @@ Downloads Webview ------- +- Hinting got really slow (new webelement api?) - Hint positions wrong in wordpress admin interface - Rightclick -> Copy link copies relative links - F on duckduckgo result page opens in current page @@ -35,6 +36,8 @@ Webview Input ----- +- going to passthrough mode (Ctrl-V) then clicking element to go to insert + mode, then leaving insert mode clears statusbar text. - seir sometimes sees "-- COMMAND MODE --" even though that should never happen. - Shift-Insert in commandline pastes clipboard instead of primary selection diff --git a/doc/TODO b/doc/TODO index 6fe258825..6941b7ae7 100644 --- a/doc/TODO +++ b/doc/TODO @@ -32,6 +32,8 @@ New big features Certificate Patrol https://chrome.google.com/webstore/detail/remove-google-redirects/ccenmflbeofaceccfhhggbagkblihpoh - session handling / saving + -> commandline parameter for session name, then tab list and history gets + saved under that name and can be re-loaded. - multi window (see notes) - IPC, like dwb -x (see notes) - Bookmarks @@ -54,6 +56,13 @@ Downloads Improvements / minor features ============================= +- Command/page to show all keybindings? +- File moves: + - state should be in data, not config + - data/cache should be in subdirs on Windows if everything is in the same + dir. +- view_source using pygments +- check what exceptions open() calls could possibly throw - Improve -m error message when we're inside the qutebrowser dir (maybe use a Tk gui?) - Sane default for editor (maybe via QDesktopServices or so?) diff --git a/qutebrowser/browser/hints.py b/qutebrowser/browser/hints.py index 97b133ff7..3e050f3c9 100644 --- a/qutebrowser/browser/hints.py +++ b/qutebrowser/browser/hints.py @@ -388,15 +388,17 @@ class HintManager(QObject): Return: A QUrl with the absolute URL, or None. """ - text = elem['href'] - if not text: + try: + text = elem['href'] + except KeyError: return None - if baseurl is None: - baseurl = self._context.baseurl url = QUrl(text) + if not url.isValid(): + return None if url.isRelative(): + if baseurl is None: + baseurl = self._context.baseurl url = baseurl.resolved(url) - qtutils.ensure_valid(url) return url def _find_prevnext(self, frame, prev=False): @@ -466,7 +468,7 @@ class HintManager(QObject): raise cmdexc.CommandError("No {} links found!".format( "prev" if prev else "forward")) url = self._resolve_url(elem, baseurl) - if url is None or not url.isValid(): + if url is None: raise cmdexc.CommandError("No {} links found!".format( "prev" if prev else "forward")) self.openurl.emit(url, newtab) diff --git a/qutebrowser/browser/webpage.py b/qutebrowser/browser/webpage.py index ccd45b790..795e7a1d0 100644 --- a/qutebrowser/browser/webpage.py +++ b/qutebrowser/browser/webpage.py @@ -242,21 +242,21 @@ class BrowserPage(QWebPage): return super().extension(ext, opt, out) return handler(opt, out) except: # pylint: disable=bare-except - # WORKAROUND: - # - # Due to a bug in PyQt, exceptions inside extension() get - # swallowed: - # http://www.riverbankcomputing.com/pipermail/pyqt/2014-August/034722.html - # - # We used to re-raise the exception with a single-shot QTimer here, - # but that lead to a strange proble with a KeyError with some - # random jinja template stuff as content. For now, we only log it, - # so it doesn't pass 100% silently. - # - # FIXME: This should be fixed with PyQt 5.3.2 - re-check when it's - # out and raise the exception normally if possible. - log.webview.exception("Error inside WebPage::extension") - return False + if PYQT_VERSION >= 0x50302: + raise + else: + # WORKAROUND: + # + # Due to a bug in PyQt, exceptions inside extension() get + # swallowed: + # http://www.riverbankcomputing.com/pipermail/pyqt/2014-August/034722.html + # + # We used to re-raise the exception with a single-shot QTimer + # here, but that lead to a strange proble with a KeyError with + # some random jinja template stuff as content. For now, we only + # log it, so it doesn't pass 100% silently. + log.webview.exception("Error inside WebPage::extension") + return False def javaScriptAlert(self, _frame, msg): """Override javaScriptAlert to use the statusbar.""" diff --git a/qutebrowser/config/configtypes.py b/qutebrowser/config/configtypes.py index fada5ae1b..82b94ee3c 100644 --- a/qutebrowser/config/configtypes.py +++ b/qutebrowser/config/configtypes.py @@ -909,7 +909,7 @@ class WebKitBytesList(List): "set!".format(self.length)) -class ShellCommand(String): +class ShellCommand(BaseType): """A shellcommand which is split via shlex. @@ -920,7 +920,7 @@ class ShellCommand(String): typestr = 'shell-command' def __init__(self, placeholder=False, none_ok=False): - super().__init__(none_ok=none_ok) + super().__init__(none_ok) self.placeholder = placeholder def validate(self, value): @@ -929,9 +929,12 @@ class ShellCommand(String): return else: raise ValidationError(value, "may not be empty!") - super().validate(value) if self.placeholder and '{}' not in self.transform(value): raise ValidationError(value, "needs to contain a {}-placeholder.") + try: + shlex.split(value) + except ValueError as e: + raise ValidationError(value, str(e)) def transform(self, value): if not value: diff --git a/qutebrowser/widgets/tabbedbrowser.py b/qutebrowser/widgets/tabbedbrowser.py index 43bc9ebd8..cd9432d94 100644 --- a/qutebrowser/widgets/tabbedbrowser.py +++ b/qutebrowser/widgets/tabbedbrowser.py @@ -411,7 +411,7 @@ class TabbedBrowser(tabwidget.TabWidget): super().on_config_changed(section, option) for tab in self._tabs: tab.on_config_changed(section, option) - if (section, option) == ('tabbar', 'show-favicons'): + if (section, option) == ('tabs', 'show-favicons'): show = config.get('tabs', 'show-favicons') for i, tab in enumerate(self.widgets()): if show: diff --git a/qutebrowser/widgets/tabwidget.py b/qutebrowser/widgets/tabwidget.py index b3fdc733b..9301d9fbe 100644 --- a/qutebrowser/widgets/tabwidget.py +++ b/qutebrowser/widgets/tabwidget.py @@ -83,7 +83,7 @@ class TabWidget(QTabWidget): def on_config_changed(self, section, option): """Update attributes when config changed.""" self.tabBar().on_config_changed(section, option) - if section == 'tabbar': + if section == 'tabs': self._init_config()