Small fixes to main.py
This commit is contained in:
parent
094af5f25a
commit
f62e06b988
56
main.py
56
main.py
|
@ -16,18 +16,22 @@ from ulauncher.api.shared.action.RenderResultListAction import RenderResultListA
|
|||
from ulauncher.api.shared.action.CopyToClipboardAction import CopyToClipboardAction
|
||||
from ulauncher.api.shared.action.HideWindowAction import HideWindowAction
|
||||
|
||||
# Be compatible with both python 2 and 3
|
||||
if sys.version_info[0] >= 3:
|
||||
unichr = chr
|
||||
|
||||
FILE_PATH = os.path.dirname(sys.argv[0])
|
||||
|
||||
ICON_TEMPLATE = '''
|
||||
ICON_TEMPLATE = """
|
||||
<svg width="100" height="100">
|
||||
<text x="50" y="50" dy=".35em" text-anchor="middle" font-family="{font}" font-size="80">{symbol}</text>
|
||||
</svg>
|
||||
'''
|
||||
"""
|
||||
|
||||
|
||||
class UnicodeChar:
|
||||
""" Container class for unicode characters """
|
||||
|
||||
def __init__(self, name, block, code):
|
||||
self.name = name
|
||||
self.block = block
|
||||
|
@ -35,44 +39,35 @@ class UnicodeChar:
|
|||
self.character = unichr(int(code, 16))
|
||||
|
||||
def get_search_name(self):
|
||||
""" Called by `ulauncher.search.SortedList` to get the string that should be used in searches """
|
||||
return self.name
|
||||
|
||||
|
||||
class SearchableItem:
|
||||
def __init__(self, name, item):
|
||||
self._name = name
|
||||
self._item = item
|
||||
|
||||
def get_search_name(self):
|
||||
return self._name
|
||||
|
||||
class UnicodeCharExtension(Extension):
|
||||
def __init__(self):
|
||||
super(UnicodeCharExtension, self).__init__()
|
||||
self._load_character_table()
|
||||
self.subscribe(KeywordQueryEvent, KeywordQueryEventListener())
|
||||
|
||||
|
||||
class KeywordQueryEventListener(EventListener):
|
||||
def __init__(self):
|
||||
self._load_character_table()
|
||||
|
||||
def _load_character_table(self):
|
||||
""" Read the data file and load to memory """
|
||||
self.character_list = []
|
||||
with open(join(FILE_PATH, "unicode_list.txt"), "r") as f:
|
||||
for line in f.readlines():
|
||||
name, code, block = line.strip().split('\t')
|
||||
name, code, block = line.strip().split("\t")
|
||||
character = UnicodeChar(name, block, code)
|
||||
self.character_list.append(character)
|
||||
|
||||
|
||||
class KeywordQueryEventListener(EventListener):
|
||||
def on_event(self, event, extension):
|
||||
items = []
|
||||
arg = event.get_argument()
|
||||
if arg:
|
||||
m_ = SortedList(arg, min_score=60, limit=10)
|
||||
m_.extend(self.character_list)
|
||||
for char in m_:
|
||||
image_path = self._get_character_icon(char.code)
|
||||
result_list = SortedList(arg, min_score=60, limit=10)
|
||||
result_list.extend(extension.character_list)
|
||||
for char in result_list:
|
||||
image_path = self._get_character_icon(char)
|
||||
items.append(
|
||||
ExtensionResultItem(
|
||||
icon=image_path,
|
||||
|
@ -84,25 +79,30 @@ class KeywordQueryEventListener(EventListener):
|
|||
|
||||
return RenderResultListAction(items)
|
||||
|
||||
def _get_character_icon(self, code):
|
||||
path = sys.argv[0] + "images/cache/icon_%s.svg" % code
|
||||
def _get_character_icon(self, char):
|
||||
path = sys.argv[0] + "images/cache/icon_%s.svg" % char.code
|
||||
if os.path.isfile(path):
|
||||
return path
|
||||
return create_character_icon(code)
|
||||
return create_character_icon(char)
|
||||
|
||||
|
||||
def is_icon_cached(code):
|
||||
return os.path.isfile(os.path.join(FILE_PATH, "images/cache/icon_%s.svg" % code))
|
||||
|
||||
|
||||
def create_character_icon(code, font='sans-serif'):
|
||||
template = ICON_TEMPLATE
|
||||
icon = template.replace("{symbol}", unichr(int(code, 16))).replace('{font}', font)
|
||||
def create_character_icon(char, font="sans-serif"):
|
||||
""" Create an SVG file containing the unicode glyph for char to be used
|
||||
as a result icon.
|
||||
|
||||
Note: this could be avoided by providing a gtk.PixBuf without creating a file,
|
||||
but ulauncher pickles the returned results, so it doesn't work currently.
|
||||
"""
|
||||
icon = ICON_TEMPLATE.replace("{symbol}", char.character).replace("{font}", font)
|
||||
with codecs.open(
|
||||
os.path.join(FILE_PATH, "images/cache/icon_%s.svg" % code), "w", "utf-8"
|
||||
os.path.join(FILE_PATH, "images/cache/icon_%s.svg" % char.code), "w", "utf-8"
|
||||
) as target:
|
||||
target.write(icon)
|
||||
return os.path.join(FILE_PATH, "images/cache/icon_%s.svg" % code)
|
||||
return os.path.join(FILE_PATH, "images/cache/icon_%s.svg" % char.code)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Loading…
Reference in a new issue