I've been using SciTE as editor of choice for some time, and spent a little time today getting a few extra things working for C99 projects. This year I'm refreshing my C a bit, as I haven't done anything which has specifically used C99.
There's support in SciTE for autocompletion of words within the file by hitting Ctrl+Enter, but you can also add .api files which list function prototypes for an API, giving autocompletion via Ctrl+I. You can either use the files provided for C and Java, or use ctags and a bit of Python to build your own.
The C.api file on scintilla.org is a bit small, but I couldn't get ctags to find most of the prototypes from /usr/include/*.h and /usr/include/sys/*.h. So I made a little bash script to pass each header through cpp, then extract it, which worked OK. 
This seems to work to generate tags file for conversion to SciTE api file:
    ctags -f - --c-kinds=+p-d --excmd=number  /usr/include/*.h | grep -E "^[^~_]" > tags 
or from the kin project folder:
    ctags -f - --c-kinds=+p-d --excmd=number  src/core/*.h | grep -E "^([^_~]|_[^_])" > tags 
    without --excmd=number the python script fails to convert the tags to api, as it uses patterns rather than line numbers.
Also changed some of user properties - to break it up a bit more with files into the ~/.SciTE/ folder. This moves the c and asm highlighing into separate files, a machine.properties file for machine specifics (such as where to put the window and whether to show tabs and status, which depends on screen size). 
I also created a 'workbook.sh' script to write the date to today's workbook file and open it.
To get directory properties working, enable them in user properties with
    properties.directory.enable=1
Then the SciTEDirectory.properties file has its local settings for the project. This defines 
    # project home
    ProjectHome=$(SciteDirectoryHome)
    # make 
    make.command=cd $(ProjectHome); make $(FileName)
    # go
    command.go.*.c=cd $(ProjectHome);bin/$(FileName)
    # Extend C API with project API
    api.*.c=/home/pete/.SciTE/c99.api;project.api
    # Retag
    command.name.1.*=Retag
    command.subsystem.1.*=2
    command.1.*=cd $(ProjectHome);\
        ctags -f - --c-kinds=+p --excmd=number  src/core/*.h | grep -E "^(kini?|opcode)_" > project.tags; \
        python ~/.SciTE/tags2api.py project.tags > project.api\
        rm project.tags
    # Apropos
    command.name.2.*=Apropos
    command.subsystem.2.*=1
    command.2.*=grep -E $(CurrentWord) /home/pete/.SciTE/c99.api $(ProjectHome)/project.api
    # Info
    command.name.3.*=Info
    command.subsystem.3.*=1
    command.3.*=firefox http://www.opengroup.org/onlinepubs/000095399/functions/$(CurrentWord).html 
This means build and run are performed in the project folder, and adds three extra commands - the first runs ctags to rebuild the project's tag index. The second searches the tag index for a highlighted word as a substring (rather than the built-in popup, which you type the first few letters). The third opens the unix spec for the highlighted function, which includes the C standard library functions too.
I've put the contents of my ~/.SciTE folder 
here, along with my .SciTEUser.properties file. There's the generated C99.api, asm and cpp properties without bold fonts (which mess up formatting), a version of cleanup.cc which will compile with gcc, protags.sh which preprocesses and ctags include files, and workbook.sh which creates a workbook/TODAY.log file and opens it in SciTE.
Labels: c99, programming, scite, tools