Codebase list gjots2 / HEAD bin / gjots2
HEAD

Tree @HEAD (Download .tar.gz)

gjots2 @HEADraw · history · blame

#!/usr/bin/env python

import sys, os, getopt
import linecache
from distutils.sysconfig import get_python_lib

def traceit(frame, event, arg):
    if event == "line" or event == "call":
        lineno = frame.f_lineno
        filename = frame.f_globals["__file__"]
        if (filename.endswith(".pyc") or
            filename.endswith(".pyo")):
            filename = filename[:-1]
        name = frame.f_globals["__name__"]
        line = linecache.getline(filename, lineno)
        print "%s:%s:%s: %s" % (event, name, lineno, line.rstrip())
    return traceit

def ver2str(ver):
    return ".".join(map(str,ver))

def usage():
    print _("""Usage: gjots [OPTIONS] [FILENAME]
A gtk/X11 jotter

OPTIONS:
-h, --help:                         this help
-d, --debug:                        debug to stdout
-t, --trace:                        trace lines as they execute
-g 123x456, --geometry=123x456:     initial geometry (X x Y)
-p, --purge-password                don't remember password
-r, --readonly:                     no editing (or locking)
-V, --version:                      print the version and exit

FILENAME:
    gjots data filename (default is $HOME/.gjotsfile)
""")

if __name__ == '__main__':
    dirName, progName = os.path.split(sys.argv[0])
    prefix = sys.prefix

    #
    # Add the library path to the system load path
    #
    # developer should use local version executed from the current directory:
    localdir = os.curdir + "/lib"
    if os.access(localdir, os.F_OK) and os.access("ui/gjots.ui", os.F_OK):
        prefix = localdir
        sys.path = [ localdir ] + sys.path
        sys.stderr.write("%s: Warning: running modules from %s\n" % (progName, localdir))
    else:
        sys.path = [ get_python_lib() + '/gjots2' ] + sys.path

    # i18n support
    import gettext
    import locale

    # Locale setting in Gtk.Builder appears somewhat broken under Python. See:
    #   https://bugzilla.gnome.org/show_bug.cgi?id=574520
    locale_domain = "gjots2"
    locale_dir = prefix + "/share/locale"
    
    gettext.bindtextdomain(locale_domain, locale_dir)
    locale.setlocale(locale.LC_ALL, '')
    gettext.textdomain(locale_domain)
    gettext.install(locale_domain, localedir=locale_dir, unicode=True)
    try:
        locale.bindtextdomain(locale_domain, locale_dir)
        locale.bind_textdomain_codeset(locale_domain, 'UTF-8')
    except locale.Error:
        print "Couldn't bind the translation domain. Some translations won't work."
    _ = gettext.gettext

    #
    # python version
    #
    pyver = (2,5)
    if sys.version_info[:2] < pyver:
        sys.stderr.write(_("%s requires python%s or higher.") % (progName, ver2str(pyver)))
        sys.exit(1)

    #
    # pygtk version
    #
    import gi
    gi.require_version("Gtk", "3.0")

    from gui import *
    from version import *

    try:
        opts, args = getopt.getopt(sys.argv[1:], "hdrtg:V", ["help", "debug", "readonly", "trace", "geometry=", "version"])
    except getopt.GetoptError, errmsg:
        sys.stderr.write("%s: %s\n" % (progName, errmsg))
        sys.stderr.write(_("Use -h for help\n"))
        sys.exit(2)

    readonly = 0
    output = None
    geometry = ""
    prefs = ""
    debug = 0
    purge_password = 0
    for o, a in opts:
        if o in ("-h", "--help"):
            usage()
            sys.exit(0)
        if o in ("-V", "--version"):
            print _("%s version %s") % (progName, gjots_version)
            sys.exit(0)
        if o in ("-p", "--purge-password"):
            purge_password = 1
        if o in ("-r", "--readonly"):
            readonly = 1
        if o in ("-g", "--geometry"):
            geometry = a
        if o in ("-d", "--debug"):
            debug = 1
        if o in ("-t", "--trace"):
            sys.settrace(traceit)

    if len(args):
        filename = args[0]
    else:
        filename = os.environ["HOME"]+"/.gjotsfile"

    if not os.access(filename, os.R_OK):
        os.system("touch " + filename)

    gui = gjots_gui(prefix, progName, geometry, filename, readonly, debug, purge_password)

    Gtk.main()


# Local variables:
# eval:(setq compile-command "./gjots2 test.gjots")
# eval:(setq-default indent-tabs-mode 1)
# eval:(setq tab-width 4)
# eval:(setq python-indent 4)
# End: