From 400f619903c8202b9dbe5a59d0abdd3ca76c058c Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sat, 28 Jun 2014 01:15:31 +0200 Subject: [PATCH] Handle user variables in path correctly --- doc/TODO | 1 - qutebrowser/browser/downloads.py | 2 +- qutebrowser/config/conftypes.py | 10 +++++++++- qutebrowser/utils/url.py | 9 +++++---- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/doc/TODO b/doc/TODO index 82e1907f4..73465b9f9 100644 --- a/doc/TODO +++ b/doc/TODO @@ -50,7 +50,6 @@ Downloads Improvements / minor features ============================= -- qutebrowser local_file.foo should open that file in $PWD - Distinction between :q and :wq, add ZZ and ZQ shortcuts. - set_toggle to toggle setting between two states - Customizable statusbar diff --git a/qutebrowser/browser/downloads.py b/qutebrowser/browser/downloads.py index 76539b3e3..d8ec32a01 100644 --- a/qutebrowser/browser/downloads.py +++ b/qutebrowser/browser/downloads.py @@ -209,7 +209,7 @@ class DownloadItem(QObject): None: special value to stop the download. """ if os.path.isabs(filename): - target = filename + target = os.path.expanduser(filename) else: download_dir = config.get('storage', 'download-directory') target = os.path.join(download_dir, filename) diff --git a/qutebrowser/config/conftypes.py b/qutebrowser/config/conftypes.py index 6810910d2..17c7234b0 100644 --- a/qutebrowser/config/conftypes.py +++ b/qutebrowser/config/conftypes.py @@ -580,10 +580,16 @@ class File(BaseType): typestr = 'file' def validate(self, value): + value = os.path.expanduser(value) if self.none_ok and not value: return if not os.path.isfile(value): raise ValidationError(value, "must be a valid file!") + if not os.path.isabs(value): + raise ValidationError(value, "must be an absolute path!") + + def transform(self, value): + return os.path.expanduser(value) class Directory(BaseType): @@ -597,11 +603,13 @@ class Directory(BaseType): return if not os.path.isdir(value): raise ValidationError(value, "must be a valid directory!") + if not os.path.isabs(value): + raise ValidationError(value, "must be an absolute path!") def transform(self, value): if not value: return get_standard_dir(QStandardPaths.DownloadLocation) - return value + return os.path.expanduser(value) class WebKitBytes(BaseType): diff --git a/qutebrowser/utils/url.py b/qutebrowser/utils/url.py index bfb7577b8..0698d8b7e 100644 --- a/qutebrowser/utils/url.py +++ b/qutebrowser/utils/url.py @@ -122,8 +122,12 @@ def fuzzy_url(urlstr): Return: A target QUrl to a searchpage or the original URL. """ + path = os.path.abspath(os.path.expanduser(urlstr)) stripped = urlstr.strip() - if is_url(stripped): + if os.path.exists(path): + logger.debug("URL is a local file") + url = QUrl.fromLocalFile(path) + elif is_url(stripped): # probably an address logger.debug("URL is a fuzzy address") url = QUrl.fromUserInput(urlstr) @@ -180,9 +184,6 @@ def is_url(urlstr): # Special URLs are always URLs, even with autosearch=False logger.debug("Is an special URL.") return True - elif os.path.exists(urlstr): - # local file - return True elif autosearch == 'dns': logger.debug("Checking via DNS") # We want to use fromUserInput here, as the user might enter "foo.de"