C glimmerout gcc -g %2 -o %3 2>&1 %term% gdb %3 %term% %1/%3 1 0 4 c h m text/x-c cpp-comment // \n c-comment /\* \*/ defs_full ^#\ *\t*\(include\|pragma\) \(\n\) string " \("\|\n\) define_comment ^#if 0 ^#endif chars '\\?[a-zA-Z0-9_\\()#@!$%^&*-=+"{}<>]' defs ^#\ *\t*\(if\|ifdef\|ifndef\|else\|elif\|define\|endif\|undef\)\b typedefs \b\(char\|double\|float\|int\|long\|register\|short\|unsigned\)\b keywords \b\(asm\|auto\|break\|case\|const\|continue\|default\|do\|else\|enum\|extern\|for\|goto\|if\|return\|signed\|sizeof\|static\|struct\|switch\|typedef\|union\|unsigned\|void\|volotile\|while\)\b glib \b\(gint\|gfloat\|gdouble\|gboolean\|gchar\|gpointer\|guint\|guchar\|GList\|GSList\|GHash\|GString\|GModule\|GTable\|GTree\)\b macros \b[A-Z_][A-Z0-9_\-]+\b gui-types \b\(Gtk\|Gds\|Gdk\|Gnome\)[a-zA-Z0-9_]+ gui-funcs \b\(gtk\|gdk\|g\|gnome\|gds\)_[a-zA-Z0-9_]+ bonobo-types \bBonobo[a-zA-Z0-9_]+ bonobo-calls \bbonobo_[a-zA-Z0-9_]+ labels ^[a-zA-Z_]*: whole_numbers1 \b[0-9]\b whole_numbers2 \b[1-9][0-9]*\b float_numbers1 \.\b[0-9]+\b float_numbers2 \b[0-9]*\.\W hex_numbers \b0x[0-9a-fA-F]+\b oct_numbers \b0[0-7]+\b bin_numbers \b0[01]+\b operators \(\*\|\*\*\|->\|::\|>>\|<<\|>\|<\|=\|==\|!=\|<=\|>=\|++\|--\|%\|+\|-\|||\|&&\|!\|+=\|-=\|\*=\|/=\|%=\|~\) punctuation \((\|)\|;\|:\|{\|}\|,\|\[\|\]\|\.\) import glimmer import string def c_enter_callback(): insert = "\n" extralen = 0 slen = 0 file = glimmer.get_file_number() tstart = glimmer.line_start() tend = glimmer.current_position() if (tend-tstart) > 0: chars = glimmer.get_text(tstart, tend) slen = len(chars) if slen > 0: index = 0 while index < slen: c = chars[index] if c == '\t' or c == ' ': insert = insert + chars[index] index = index+1 else: break c = chars[slen-1] if c == '{': extralen = glimmer.get_file_tab_width(file) if glimmer.get_file_use_spaces(file): while extralen > 0: insert = insert + " " extralen = extralen-1 else: insert = insert + '\t' glimmer.insert(insert) def c_tab_callback(): tablen = 0 insertchars = "" file = glimmer.get_file_number() if glimmer.get_file_use_spaces(file): tablen = glimmer.get_file_tab_width(file) pos = glimmer.current_position() lstart = glimmer.line_start() if pos - lstart > 0: str1 = glimmer.get_text(lstart, pos) else: str1 = "" if glimmer.get_tab_stops(): str1 = string.expandtabs(str1, tablen) len1 = len(str1) del str1 tablen = tablen - (len1 % tablen) while tablen > 0: insertchars = insertchars + " " tablen = tablen-1 else: insertchars = insertchars + "\t" glimmer.insert(insertchars) def insert_comment(): glimmer.freeze() if glimmer.has_selection(): start = glimmer.selection_start() end = glimmer.selection_end() file = glimmer.get_file_number() glimmer.move(0) glimmer.insert_in(file, start, "/* ") glimmer.insert_in(file, end+3, " */") glimmer.move_to(end+6) else: glimmer.insert("/*\n *\n*/") glimmer.move(-3) glimmer.thaw() def open_c_header(): import string file = 0 fname = "" file = glimmer.get_file_number() fname = glimmer.get_filename(file) path = "" noext = "" fullfile = "" openfile = 0 if string.count(fname, ".c"): openfile = 1 path = glimmer.get_path(file) noext = glimmer.get_file(file) fullfile = path + "/" + noext + ".h" elif string.count(fname, ".h"): openfile = 1 path = glimmer.get_path(file) noext = glimmer.get_file(file) fullfile = path + "/" + noext + ".c" if openfile: openedfile = open(fullfile) if openedfile: del openedfile glimmer.open_file(fullfile) glimmer.register_signal_hook("enter-pressed", c_enter_callback) glimmer.register_signal_hook("tab-pressed", c_tab_callback) glimmer.add_sub_to_menu("_Insert/", "C", -1) glimmer.add_item_to_menu("_Insert/C/", "Comment (C)", "", "", -1, insert_comment) glimmer.add_item_to_popup_menu("Open Reverse", -1, open_c_header) glimmer.add_item_to_popup_menu("Comment (C)", -1, insert_comment)