-
Notifications
You must be signed in to change notification settings - Fork 17
/
searchplugin.py
60 lines (51 loc) · 2.1 KB
/
searchplugin.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Gdk
import urllib.parse
import terminatorlib.plugin as plugin
import re
# Written by John Cooper http://choffee.co.uk
# Copyright 2010 John Cooper
# See copyright file that comes with this file for full licence
# Modified by cgw 2011/11/06
# AVAILABLE must contain a list of all the classes that you want exposed
AVAILABLE = ['SearchPlugin']
gtk = Gtk
_spaces = re.compile(" +")
# TODO: move some of the constants into a config object
class SearchPlugin(plugin.Plugin):
capabilities = ['terminal_menu']
def do_search(self, searchMenu):
"""Launch Google search for string"""
if not self.searchstring:
return
base_uri = "https://www.google.com/search?q=%s"
uri = base_uri % urllib.parse.quote(self.searchstring.encode("utf-8"))
gtk.show_uri(None, uri, Gdk.CURRENT_TIME)
def callback(self, menuitems, menu, terminal):
"""Add our menu item to the menu"""
self.terminal = terminal
item = gtk.ImageMenuItem(gtk.STOCK_FIND)
item.connect('activate', self.do_search)
if terminal.vte.get_has_selection():
clip = gtk.Clipboard.get(Gdk.SELECTION_PRIMARY)
self.searchstring = clip.wait_for_text().strip()
self.searchstring = self.searchstring.replace("\n", " ")
self.searchstring = self.searchstring.replace("\t", " ")
self.searchstring = _spaces.sub(" ", self.searchstring)
else:
self.searchstring = None
if self.searchstring:
if len(self.searchstring) > 40:
displaystring = self.searchstring[:37] + "..."
else:
displaystring = self.searchstring
item.set_label("Search Google for \"%s\"" % displaystring)
item.set_sensitive(True)
else:
item.set_label("Search Google")
item.set_sensitive(False)
# Avoid turning any underscores in selection into menu accelerators
item.set_use_underline(False)
menuitems.append(item)