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.
This commit is contained in:
Mathias Fussenegger 2014-11-27 21:45:04 +01:00
parent 1a17b3fb23
commit 68398035ef
2 changed files with 22 additions and 14 deletions

View File

@ -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

View File

@ -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