#!/usr/bin/python # This file is part of the Hotwire Shell user interface. # # Copyright (C) 2007 Colin Walters # # 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 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import sys, os, locale, gettext import getopt, logging, re, string, Queue import gtk, gobject, pango if __name__ == '__main__' and hasattr(sys.modules['__main__'], '__file__'): basedir = os.path.dirname(os.path.abspath(__file__)) up_basedir = os.path.dirname(basedir) if os.path.basename(basedir) == 'ui': sys.path.insert(0, up_basedir) import hotwire import hotwire.sysdep import hotwire.logutil import hotwire.util from hotwire_ui.editor import HotEditorWindow from hotwire.version import __version__, svn_version_str try: from hotwire.sysdep.ipc import Ipc ipc_avail = True except NotImplementedError, e: ipc_avail = False _logger = logging.getLogger("hotwire.EditorMain") def usage(): sys.stdout.write('Hotwire editor %s %s\n' % (__version__, svn_version_str())) sys.stdout.write("%s [--debug] [--debug-modules=mod1,mod2...] [--help]\n" % (sys.argv[0],)) def main(): try: opts, args = getopt.getopt(sys.argv[1:], "hdr", ["help", "debug", "debug-modules=","icon-name=", "read-only"]) except getopt.GetoptError: usage() sys.exit(2) lineno = -1 lineno_argidx = None for i,arg in enumerate(args): if arg.startswith('+'): try: lineno = int(arg[1:]) lineno_argidx = i except ValueError, e: pass if lineno_argidx is not None: del args[lineno_argidx] if len(args) < 1: sys.stderr.write('no file specified, exiting\n') sys.exit(1) files = args debug = False debug_modules = [] icon_name = 'gtk-floppy' readonly = False for o, v in opts: if o in ('-d', '--debug'): debug = True elif o in ('--debug-modules'): debug_modules = v.split(',') elif o in ("-h", "--help"): usage() sys.exit() elif o in ('-r' , '--read-only'): readonly = True default_log_level = logging.ERROR if debug: default_log_level = logging.DEBUG hotwire.logutil.init(default_log_level, debug_modules, 'hotwire.') locale.setlocale(locale.LC_ALL, '') import gettext gettext.install('hotwire') _logger.debug('initializing threads') gobject.threads_init() wincount = 0 for fpath in files: w = HotEditorWindow(filename=fpath) wincount += 1 w.set_code_mode(True) w.set_icon_name(icon_name) if readonly: w.set_read_only(readonly) if lineno >= 0: w.goto_line(lineno) lineno = -1 w.show_all() def handle_destroy(w, wincount): wincount -= 1 if wincount == 0: gtk.main_quit() w.connect('destroy', handle_destroy, wincount) _logger.debug('entering mainloop') gtk.gdk.threads_enter() gtk.main() gtk.gdk.threads_leave() if __name__ == "__main__": main()