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)