@@ -23,7 +23,7 @@ if __name__ == "__main__":
2323 path.append(realpath(dirname(realpath(__file__))+'/../'))
2424
2525from flask import Flask, request, render_template, url_for, Response, make_response
26−from searx.engines import search, categories, get_engines_stats
26+from searx.engines import search, categories, engines, get_engines_stats
2727from searx import settings
2828import json
2929
@@ -56,6 +56,14 @@ def render(template_name, **kwargs):
5656 kwargs['selected_categories'] = ['general']
5757 return render_template(template_name, **kwargs)
5858
59+def parse_query(query):
60+ query_engines = []
61+ query_parts = query.split()
62+ if query_parts[0].startswith('-') and query_parts[0][1:] in engines:
63+ query_engines.append({'category': 'TODO', 'name': query_parts[0][1:]})
64+ query = query.replace(query_parts[0], '', 1).strip()
65+ return query, query_engines
66+
5967@app.route('/', methods=['GET', 'POST'])
6068def index():
6169 global categories
@@ -66,26 +74,27 @@ def index():
6674 if not request_data.get('q'):
6775 return render('index.html')
6876
69− query = request_data['q'].encode('utf-8')
70−
7177 selected_categories = []
72− for pd_name,pd in request_data.items():
73− if pd_name.startswith('category_'):
74− category = pd_name[9:]
75− if not category in categories:
76− continue
77− selected_categories.append(category)
78− if not len(selected_categories):
79− cookie_categories = request.cookies.get('categories', '').split(',')
80− for ccateg in cookie_categories:
81− if ccateg in categories:
82− selected_categories.append(ccateg)
83− if not len(selected_categories):
84− selected_categories = ['general']
8578
86− selected_engines = []
87− for categ in selected_categories:
88− selected_engines.extend({'category': categ, 'name': x.name} for x in categories[categ])
79+ query, selected_engines = parse_query(request_data['q'].encode('utf-8'))
80+
81+ if not len(selected_engines):
82+ for pd_name,pd in request_data.items():
83+ if pd_name.startswith('category_'):
84+ category = pd_name[9:]
85+ if not category in categories:
86+ continue
87+ selected_categories.append(category)
88+ if not len(selected_categories):
89+ cookie_categories = request.cookies.get('categories', '').split(',')
90+ for ccateg in cookie_categories:
91+ if ccateg in categories:
92+ selected_categories.append(ccateg)
93+ if not len(selected_categories):
94+ selected_categories = ['general']
95+
96+ for categ in selected_categories:
97+ selected_engines.extend({'category': categ, 'name': x.name} for x in categories[categ])
8998
9099 results = search(query, request, selected_engines)
91100 for result in results:
@@ -97,7 +106,7 @@ def index():
97106 return Response(json.dumps({'query': query, 'results': results}), mimetype='application/json')
98107 template = render('results.html'
99108 ,results=results
100− ,q=query.decode('utf-8')
109+ ,q=request_data['q']
101110 ,selected_categories=selected_categories
102111 ,number_of_results=len(results)
103112 )