This repository has been archived by the owner on Nov 13, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
108 lines (88 loc) · 3.1 KB
/
main.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# vim: set fileencoding=utf-8 :
#
# ibus-plover - Plover support for Input Bus
#
# Copyright (c) 2013-2014 Benoit Pierre <[email protected]>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
from gi.repository import IBus
from gi.repository import GLib
from gi.repository import GObject
import os
import sys
import getopt
import locale
import logging
from config import DATA_DIR
from engine import EnginePlover
class IMApp:
def __init__(self, exec_by_ibus):
component = IBus.Component.new_from_file('%s/plover.xml' % DATA_DIR)
self.__component = component
self.__mainloop = GLib.MainLoop()
self.__bus = IBus.Bus()
self.__bus.connect("disconnected", self.__bus_disconnected_cb)
self.__factory = IBus.Factory.new(self.__bus.get_connection())
self.__factory.add_engine('plover', GObject.type_from_name("EnginePlover"))
if exec_by_ibus:
self.__bus.request_name("org.freedesktop.IBus.Plover", 0)
else:
self.__bus.register_component(self.__component)
def run(self):
self.__mainloop.run()
def __bus_disconnected_cb(self, bus):
self.__mainloop.quit()
def launch_engine(exec_by_ibus):
IBus.init()
IMApp(exec_by_ibus).run()
def print_help(out, v = 0):
print >> out, "-i, --ibus executed by IBus."
print >> out, "-h, --help show this message."
print >> out, "-d, --daemonize daemonize ibus"
sys.exit(v)
def main():
try:
locale.setlocale(locale.LC_ALL, "")
except:
pass
exec_by_ibus = False
daemonize = False
shortopt = "ihd"
longopt = ["ibus", "help", "daemonize"]
try:
opts, args = getopt.getopt(sys.argv[1:], shortopt, longopt)
except getopt.GetoptError, err:
print_help(sys.stderr, 1)
for o, a in opts:
if o in ("-h", "--help"):
print_help(sys.stdout)
elif o in ("-d", "--daemonize"):
daemonize = True
elif o in ("-i", "--ibus"):
exec_by_ibus = True
else:
print >> sys.stderr, "Unknown argument: %s" % o
print_help(sys.stderr, 1)
if daemonize:
if os.fork():
sys.exit()
if not exec_by_ibus and not daemonize:
logging.basicConfig()
logging.getLogger('ibus.plover').setLevel(logging.DEBUG)
else:
logging.basicConfig(filename='/tmp/ibus-plover.log', level=logging.DEBUG)
launch_engine(exec_by_ibus)
if __name__ == "__main__":
main()