def __init__(self): # Set up master widget self.root = Tk() self.root.title("FoxDot - Live Coding with Python and SuperCollider") self.root.columnconfigure(0, weight=1) self.root.rowconfigure(0, weight=2) self.root.protocol("WM_DELETE_WINDOW", self.kill) self.root.iconbitmap(FOXDOT_ICON) # Set font if self.default_font not in tkFont.families(): self.default_font = 'Courier New' self.font = tkFont.Font(font=(self.default_font, 12), name="CodeFont") self.font.configure(**tkFont.nametofont("CodeFont").configure()) # Create Y scrollbar self.Yscroll = Scrollbar(self.root) self.Yscroll.grid(row=0, column=1, sticky='nsew') # Create text box for code self.text = Text(self.root, padx=5, pady=5, bg=colour_map['background'], fg=colour_map['plaintext'], insertbackground="White", font="CodeFont", yscrollcommand=self.Yscroll.set, width=120, height=20) self.text.grid(row=0, column=0, sticky="nsew") self.Yscroll.config(command=self.text.yview) self.text.focus_set() # Docstring prompt label self.prompt = StringVar() self.promptlbl = Label(self.text, textvariable=self.prompt) self.promptlbl.place(x=9999, y=9999) self.last_word = "" self.prompt.set("") # Key bindings self.text.bind("<Return>", self.newline) self.text.bind("<BackSpace>", self.delete) self.text.bind("<Delete>", self.delete2) self.text.bind("<Tab>", self.tab) self.text.bind("<Key>", self.keypress) # Use command key on Mac (Temporary) ctrl = "Command" if SYSTEM == MAC_OS else "Control" self.text.bind("<{}-Return>".format(ctrl), self.get_code) self.text.bind("<{}-a>".format(ctrl), self.selectall) self.text.bind("<{}-period>".format(ctrl), self.killall) self.text.bind("<{}-v>".format(ctrl), self.paste) self.text.bind("<{}-bracketright>".format(ctrl), self.indent) self.text.bind("<{}-bracketleft>".format(ctrl), self.unindent) self.text.bind("<{}-equal>".format(ctrl), self.zoom_in) self.text.bind("<{}-minus>".format(ctrl), self.zoom_out) self.text.bind("<{}-z>".format(ctrl), self.undo) self.text.bind("<{}-s>".format(ctrl), self.save) self.text.bind("<{}-o>".format(ctrl), self.openfile) # Change ctrl+h on Mac (is used to close) if SYSTEM == MAC_OS: self.text.bind("<{}-k>".format(ctrl), self.help) self.help_key = "K" else: self.text.bind("<{}-h>".format(ctrl), self.help) self.help_key = "H" # Toggle console button keybind try: self.text.bind("<{}-#>".format(ctrl), self.toggle_console) self.toggle_key = "#" except: self.text.bind("<{}-t>".format(ctrl), self.toggle_console) self.toggle_key = "T" # Save feature variabes self.saved = False self.file = None self.filename = None # Automatic brackets self.inbrackets = False self.separators = py_separators self.left_brackets = left_b self.right_brackets = right_b self.all_brackets = dict(zip(self.left_brackets, self.right_brackets)) self.bracket_q = [] for char in self.left_brackets + self.right_brackets: self.text.bind(char, self.brackets) # Set tag names and config for specific colours for tier in tag_weights: for tag_name in tier: self.text.tag_config(tag_name, foreground=colour_map[tag_name]) # Create undo-stack self.undo_stack = UndoStack(self.text) # Create lable for console self.console = console(self.root, self.default_font) self.console_visible = True sys.stdout = self.console # Say Hello to the user print "Welcome to FoxDot! Press Ctrl+{} for help.".format( self.help_key) print "-----------------------------------------"