class ZenCodingWindowHelper(): def __init__(self, window): # window self.window = window # menu items actions = [ ('ZenCodingMenuAction', None, '_Zen Coding', None, "Zen Coding tools", None), ('ZenCodingExpandAction', None, '_Expand abbreviation', '<Ctrl>E', "Expand abbreviation to raw HTML/CSS", self.expand_abbreviation), ('ZenCodingExpandWAction', None, 'E_xpand with abbreviation...', '<Ctrl><Alt>E', "Type in an abbreviation to expand", self.expand_with_abbreviation), ('ZenCodingWrapAction', None, '_Wrap with abbreviation...', '<Ctrl><Shift>E', "Wrap with code expanded from abbreviation", self.wrap_with_abbreviation), ('ZenCodingZenifyAction', None, '_Zenify', None, "Reduce to abbreviation", None), ('ZenCodingZenify0Action', None, '_Tag names', '<Ctrl><Alt>Z', "Reduce to tag names only", self.zenify0), ('ZenCodingZenify1Action', None, ' + _Ids and classes', None, "Reduce with ids and classes", self.zenify1), ('ZenCodingZenify2Action', None, ' + All other _attributes', None, "Reduce with all attributes", self.zenify2), ('ZenCodingZenify3Action', None, ' + _Values', None, "Reduce with all attributes and values", self.zenify3), ('LoremIpsumAction', None, '_Lorem ipsum...', '<Ctrl><Alt>X', "Insert a lorem ipsum string", self.lorem_ipsum), ('ZenCodingInwardAction', None, 'Select _inward', '<Ctrl><Alt>I', "Select inner tag's content", self.match_pair_inward), ('ZenCodingOutwardAction', None, 'Select _outward', '<Ctrl><Alt>O', "Select outer tag's content", self.match_pair_outward), ('ZenCodingPTagAction', None, 'Previous tag', '<Ctrl><Alt>Up', "Select the previous tag in HTML code", self.prev_tag), ('ZenCodingNTagAction', None, 'Next tag', '<Ctrl><Alt>Down', "Select the next tag in HTML code", self.next_tag), ('ZenCodingPNodeAction', None, 'Previous node', '<Ctrl><Alt>Left', "Select the previous HTML node", self.prev_node), ('ZenCodingNNodeAction', None, 'Next node', '<Ctrl><Alt>Right', "Select the next HTML node", self.next_node), ('ZenCodingPrevAction', None, '_Previous edit point', '<Alt>Left', "Place the cursor at the previous edit point", self.prev_edit_point), ('ZenCodingNextAction', None, '_Next edit point', '<Alt>Right', "Place the cursor at the next edit point", self.next_edit_point), ('ZenCodingSizeAction', None, 'Update image _size', '<Ctrl><Alt>S', "Update image size tag from file", self.update_image_size), ('ZenCodingDataAction', None, 'Toggle image url/da_ta', '<Ctrl><Alt>A', "Toggle between image url and data", self.encode_decode_base64), ('ZenCodingMergeAction', None, '_Merge lines', '<Ctrl><Alt>M', "Merge all lines of the current selection", self.merge_lines), ('ZenCodingRemoveAction', None, '_Remove tag', '<Ctrl><Alt>R', "Remove a tag", self.remove_tag), ('ZenCodingSplitAction', None, 'Split or _join tag', '<Ctrl><Alt>J', "Toggle between single and double tag", self.split_join_tag), ('ZenCodingCommentAction', None, 'Toggle _comment', '<Ctrl><Alt>C', "Toggle an XML or HTML comment", self.toggle_comment), ('ZenCodingSettingsAction', None, 'E_dit settings...', None, "Customize snippets and abbreviations", self.edit_settings) ] windowdata = dict() self.window.set_data("ZenCodingPluginDataKey", windowdata) windowdata["action_group"] = gtk.ActionGroup("GeditZenCodingPluginActions") windowdata["action_group"].add_actions(actions) manager = self.window.get_ui_manager() manager.insert_action_group(windowdata["action_group"], -1) windowdata["ui_id"] = manager.add_ui_from_string(zencoding_ui_str) self.window.set_data("ZenCodingPluginInfo", windowdata) # zen coding self.modified = None self.editor = ZenEditor(self.window) def deactivate(self): # zen coding self.editor = None # menu items windowdata = self.window.get_data("ZenCodingPluginDataKey") manager = self.window.get_ui_manager() manager.remove_ui(windowdata["ui_id"]) manager.remove_action_group(windowdata["action_group"]) # window self.window = None def update_ui(self): # disabled if not editable view = self.window.get_active_view() windowdata = self.window.get_data("ZenCodingPluginDataKey") windowdata["action_group"].set_sensitive(bool(view and view.get_editable())) # user settings modified = os.path.getmtime(os.path.join(os.path.dirname(__file__), 'my_zen_settings.py')) if modified != self.modified: try: import my_zen_settings reload(my_zen_settings) except Exception as error: md = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE, "An error occured in user settings:") message = "{0} on line {1} at character {2}\n\nUser settings will not be available." md.set_title("Zen Coding error") md.format_secondary_text(message.format(error.msg, error.lineno, error.offset)) md.run() md.destroy() else: globals()['zen_core'].zen_settings = globals()['stparser'].get_settings(my_zen_settings.my_zen_settings) self.modified = modified # the content changed self.editor.set_context(view) # Menu handlers def expand_abbreviation(self, action): self.editor.expand_abbreviation() def expand_with_abbreviation(self, action): self.editor.expand_with_abbreviation() def wrap_with_abbreviation(self, action): self.editor.wrap_with_abbreviation() def zenify0(self, action): self.editor.zenify(0) def zenify1(self, action): self.editor.zenify(1) def zenify2(self, action): self.editor.zenify(2) def zenify3(self, action): self.editor.zenify(3) def lorem_ipsum(self, action): self.editor.lorem_ipsum() def match_pair_inward(self, action): self.editor.match_pair_inward() def match_pair_outward(self, action): self.editor.match_pair_outward() def prev_tag(self, action): self.editor.prev_tag() def next_tag(self, action): self.editor.next_tag() def prev_node(self, action): self.editor.prev_node() def next_node(self, action): self.editor.next_node() def prev_edit_point(self, action): self.editor.prev_edit_point() def next_edit_point(self, action): self.editor.next_edit_point() def update_image_size(self, action): self.editor.update_image_size() def encode_decode_base64(self, action): self.editor.encode_decode_base64() def merge_lines(self, action): self.editor.merge_lines() def remove_tag(self, action): self.editor.remove_tag() def split_join_tag(self, action): self.editor.split_join_tag() def toggle_comment(self, action): self.editor.toggle_comment() def edit_settings(self, action): name = 'file://' + os.path.join(os.path.dirname(__file__), 'my_zen_settings.py') self.window.create_tab_from_uri(name, None, 0, True, True)
class ZenCodingWindowHelper(): def __init__(self, window): # window self.window = window # menu items actions = [ ('ZenCodingMenuAction', None, '_Zen Coding', None, "Zen Coding tools", None), ('ZenCodingExpandAction', None, '_Expand abbreviation', '<Ctrl>E', "Expand abbreviation to raw HTML/CSS", self.expand_abbreviation), ('ZenCodingExpandWAction', None, 'E_xpand with abbreviation...', '<Ctrl><Alt>E', "Type in an abbreviation to expand", self.expand_with_abbreviation), ('ZenCodingWrapAction', None, '_Wrap with abbreviation...', '<Ctrl><Shift>E', "Wrap with code expanded from abbreviation", self.wrap_with_abbreviation), ('ZenCodingZenifyAction', None, '_Zenify', None, "Reduce to abbreviation", None), ('ZenCodingZenify0Action', None, '_Tag names', '<Ctrl><Alt>Z', "Reduce to tag names only", self.zenify0), ('ZenCodingZenify1Action', None, ' + _Ids and classes', None, "Reduce with ids and classes", self.zenify1), ('ZenCodingZenify2Action', None, ' + All other _attributes', None, "Reduce with all attributes", self.zenify2), ('ZenCodingZenify3Action', None, ' + _Values', None, "Reduce with all attributes and values", self.zenify3), ('LoremIpsumAction', None, '_Lorem ipsum...', '<Ctrl><Alt>X', "Insert a lorem ipsum string", self.lorem_ipsum), ('ZenCodingInwardAction', None, 'Select _inward', '<Ctrl><Alt>I', "Select inner tag's content", self.match_pair_inward), ('ZenCodingOutwardAction', None, 'Select _outward', '<Ctrl><Alt>O', "Select outer tag's content", self.match_pair_outward), ('ZenCodingPTagAction', None, 'Previous tag', '<Ctrl><Alt>Up', "Select the previous tag in HTML code", self.prev_tag), ('ZenCodingNTagAction', None, 'Next tag', '<Ctrl><Alt>Down', "Select the next tag in HTML code", self.next_tag), ('ZenCodingPNodeAction', None, 'Previous node', '<Ctrl><Alt>Left', "Select the previous HTML node", self.prev_node), ('ZenCodingNNodeAction', None, 'Next node', '<Ctrl><Alt>Right', "Select the next HTML node", self.next_node), ('ZenCodingPrevAction', None, '_Previous edit point', '<Alt>Left', "Place the cursor at the previous edit point", self.prev_edit_point), ('ZenCodingNextAction', None, '_Next edit point', '<Alt>Right', "Place the cursor at the next edit point", self.next_edit_point), ('ZenCodingSizeAction', None, 'Update image _size', '<Ctrl><Alt>S', "Update image size tag from file", self.update_image_size), ('ZenCodingDataAction', None, 'Toggle image url/da_ta', '<Ctrl><Alt>A', "Toggle between image url and data", self.encode_decode_base64), ('ZenCodingMergeAction', None, '_Merge lines', '<Ctrl><Alt>M', "Merge all lines of the current selection", self.merge_lines), ('ZenCodingRemoveAction', None, '_Remove tag', '<Ctrl><Alt>R', "Remove a tag", self.remove_tag), ('ZenCodingSplitAction', None, 'Split or _join tag', '<Ctrl><Alt>J', "Toggle between single and double tag", self.split_join_tag), ('ZenCodingCommentAction', None, 'Toggle _comment', '<Ctrl><Alt>C', "Toggle an XML or HTML comment", self.toggle_comment), ('ZenCodingSettingsAction', None, 'E_dit settings...', None, "Customize snippets and abbreviations", self.edit_settings) ] windowdata = dict() self.window.set_data("ZenCodingPluginDataKey", windowdata) windowdata["action_group"] = gtk.ActionGroup( "GeditZenCodingPluginActions") windowdata["action_group"].add_actions(actions) manager = self.window.get_ui_manager() manager.insert_action_group(windowdata["action_group"], -1) windowdata["ui_id"] = manager.add_ui_from_string(zencoding_ui_str) self.window.set_data("ZenCodingPluginInfo", windowdata) # zen coding self.modified = None self.editor = ZenEditor(self.window) def deactivate(self): # zen coding self.editor = None # menu items windowdata = self.window.get_data("ZenCodingPluginDataKey") manager = self.window.get_ui_manager() manager.remove_ui(windowdata["ui_id"]) manager.remove_action_group(windowdata["action_group"]) # window self.window = None def update_ui(self): # disabled if not editable view = self.window.get_active_view() windowdata = self.window.get_data("ZenCodingPluginDataKey") windowdata["action_group"].set_sensitive( bool(view and view.get_editable())) # user settings modified = os.path.getmtime( os.path.join(os.path.dirname(__file__), 'my_zen_settings.py')) if modified != self.modified: try: import my_zen_settings reload(my_zen_settings) except Exception as error: md = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE, "An error occured in user settings:") message = "{0} on line {1} at character {2}\n\nUser settings will not be available." md.set_title("Zen Coding error") md.format_secondary_text( message.format(error.msg, error.lineno, error.offset)) md.run() md.destroy() else: globals()['zen_core'].zen_settings = globals( )['stparser'].get_settings(my_zen_settings.my_zen_settings) self.modified = modified # the content changed self.editor.set_context(view) # Menu handlers def expand_abbreviation(self, action): self.editor.expand_abbreviation() def expand_with_abbreviation(self, action): self.editor.expand_with_abbreviation() def wrap_with_abbreviation(self, action): self.editor.wrap_with_abbreviation() def zenify0(self, action): self.editor.zenify(0) def zenify1(self, action): self.editor.zenify(1) def zenify2(self, action): self.editor.zenify(2) def zenify3(self, action): self.editor.zenify(3) def lorem_ipsum(self, action): self.editor.lorem_ipsum() def match_pair_inward(self, action): self.editor.match_pair_inward() def match_pair_outward(self, action): self.editor.match_pair_outward() def prev_tag(self, action): self.editor.prev_tag() def next_tag(self, action): self.editor.next_tag() def prev_node(self, action): self.editor.prev_node() def next_node(self, action): self.editor.next_node() def prev_edit_point(self, action): self.editor.prev_edit_point() def next_edit_point(self, action): self.editor.next_edit_point() def update_image_size(self, action): self.editor.update_image_size() def encode_decode_base64(self, action): self.editor.encode_decode_base64() def merge_lines(self, action): self.editor.merge_lines() def remove_tag(self, action): self.editor.remove_tag() def split_join_tag(self, action): self.editor.split_join_tag() def toggle_comment(self, action): self.editor.toggle_comment() def edit_settings(self, action): name = 'file://' + os.path.join(os.path.dirname(__file__), 'my_zen_settings.py') self.window.create_tab_from_uri(name, None, 0, True, True)