From: Tobias Schlitt Date: Thu, 7 Jul 2011 21:34:34 +0000 (+0200) Subject: - Initial checkin. X-Git-Url: https://adrianiainlam.tk/git/?p=indicator-chars.git;a=commitdiff_plain;h=797fb5e96b5a55bb7e0cb9bedf635d4a840aee87 - Initial checkin. --- 797fb5e96b5a55bb7e0cb9bedf635d4a840aee87 diff --git a/README.md b/README.md new file mode 100644 index 0000000..de8c8ca --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +indicator-chars +--------------- + +App indicator to provide a menu with (potentially funny UTF-8) characters for +simple copying them to clipboard (similar to original characters applet). + +Create a file .indicator-chars in your home dir with lines of characters to be +selectable. + +Author: Tobias Schlitt diff --git a/indicator-chars.py b/indicator-chars.py new file mode 100755 index 0000000..3c57031 --- /dev/null +++ b/indicator-chars.py @@ -0,0 +1,104 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Very simple chars indicator. +# Author: Tobias Schlitt +# +# Copyright (c) 2011, Tobias Schlitt +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. Redistributions +# in binary form must reproduce the above copyright notice, this list of +# conditions and the following disclaimer in the documentation and/or +# other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +# DAMAGE. + +import os +import gtk +import gio +import signal +import subprocess +import appindicator + +APP_NAME = 'indicator-chars' +APP_VERSION = '0.1' + +class IndicatorChars: + CHARS_PATH = os.getenv('HOME') + '/.indicator-chars' + + def __init__(self): + self.ind = appindicator.Indicator("Chars", "gnome-character-map", appindicator.CATEGORY_APPLICATION_STATUS) + self.ind.set_status(appindicator.STATUS_ACTIVE) + + self.update_menu() + + def create_menu_item(self, label): + item = gtk.MenuItem() + item.set_label(label) + return item + + def on_chars_changed(self, filemonitor, file, other_file, event_type): + if event_type == gio.FILE_MONITOR_EVENT_CHANGES_DONE_HINT: + print 'Characters changed, updating menu...' + self.update_menu() + + def update_menu(self, widget = None, data = None): + try: + charDef = open(self.CHARS_PATH).readlines() + except IOError: + charDef = [] + + # Create menu + menu = gtk.Menu() + self.ind.set_menu(menu) + + for charLine in charDef: + charLine = unicode(charLine) + charLine = charLine.strip() + parentItem = self.create_menu_item(charLine) + subMenu = gtk.Menu() + for char in charLine: + subItem = self.create_menu_item(char) + subItem.connect("activate", self.on_char_click, char) + subMenu.append(subItem) + parentItem.set_submenu(subMenu) + menu.append(parentItem) + + # Show the menu + menu.show_all() + + def on_char_click(self, widget, char): + cb = gtk.Clipboard(selection="PRIMARY") + cb.set_text(char) + +if __name__ == "__main__": + # Catch CTRL-C + signal.signal(signal.SIGINT, lambda signal, frame: gtk.main_quit()) + + # Run the indicator + i = IndicatorChars() + + # Monitor bookmarks changes + file = gio.File(i.CHARS_PATH) + monitor = file.monitor_file() + monitor.connect("changed", i.on_chars_changed) + + # Main gtk loop + gtk.main()