From 68398035ef4178f676d31fb2996f8fbd6793262c Mon Sep 17 00:00:00 2001 From: Mathias Fussenegger Date: Thu, 27 Nov 2014 21:45:04 +0100 Subject: [PATCH] change search engine syntax to match that of dwb as pointed out in https://github.com/The-Compiler/qutebrowser/issues/14 this commit changes the syntax so that DuckDuckGo bang syntax works. --- qutebrowser/test/utils/test_urlutils.py | 23 +++++++++++++++-------- qutebrowser/utils/urlutils.py | 13 +++++++------ 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/qutebrowser/test/utils/test_urlutils.py b/qutebrowser/test/utils/test_urlutils.py index 1f9607e60..81a5a0c7b 100644 --- a/qutebrowser/test/utils/test_urlutils.py +++ b/qutebrowser/test/utils/test_urlutils.py @@ -91,22 +91,29 @@ class SearchUrlTests(unittest.TestCase): self.assertEqual(url.host(), 'www.example.com') self.assertEqual(url.query(), 'q=testfoo') - def test_engine_post(self): - """Test search engine with an appended !hasbang.""" - url = urlutils._get_search_url('testfoo !test') + def test_engine_pre(self): + """Test first word is search engine name""" + url = urlutils._get_search_url('test testfoo') self.assertEqual(url.host(), 'www.qutebrowser.org') self.assertEqual(url.query(), 'q=testfoo') - def test_engine_pre(self): - """Test search engine with a prepended !hasbang.""" - url = urlutils._get_search_url('!test testfoo') + def test_engine_pre_whitespace_at_end(self): + """Test first word is search engine name""" + url = urlutils._get_search_url('test testfoo ') self.assertEqual(url.host(), 'www.qutebrowser.org') self.assertEqual(url.query(), 'q=testfoo') + def test_engine_with_bang_pre(self): + """Test search engine with a prepended !hasbang.""" + url = urlutils._get_search_url('!python testfoo') + self.assertEqual(url.host(), 'www.example.com') + self.assertEqual(url.query(), 'q=%21python testfoo') + def test_engine_wrong(self): """Test with wrong search engine.""" - with self.assertRaises(urlutils.FuzzyUrlError): - _ = urlutils._get_search_url('!blub testfoo') + url = urlutils._get_search_url('blub testfoo') + self.assertEqual(url.host(), 'www.example.com') + self.assertEqual(url.query(), 'q=blub testfoo') def tearDown(self): urlutils.config = self.config diff --git a/qutebrowser/utils/urlutils.py b/qutebrowser/utils/urlutils.py index b48e8a413..278122585 100644 --- a/qutebrowser/utils/urlutils.py +++ b/qutebrowser/utils/urlutils.py @@ -46,17 +46,18 @@ def _get_search_url(txt): The search URL as a QUrl. """ log.url.debug("Finding search engine for '{}'".format(txt)) - r = re.compile(r'(^|\s+)!(\w+)($|\s+)') + r = re.compile(r'(^\w+)\s+(\w+)($|\s+)') m = r.search(txt) if m: - engine = m.group(2) + engine = m.group(1) try: template = config.get('searchengines', engine) except config.NoOptionError: - raise FuzzyUrlError("Search engine {} not found!".format( - engine)) - term = r.sub('', txt) - log.url.debug("engine {}, term '{}'".format(engine, term)) + template = config.get('searchengines', 'DEFAULT') + term = txt + else: + term = m.group(2) + log.url.debug("engine {}, term '{}'".format(engine, term)) else: template = config.get('searchengines', 'DEFAULT') term = txt