Jump to content

Keywords/Call tips highlighted in Scite

Reaper HGN

Recommended Posts

I have been using Autoit long enough now to have my own library of UDFs (some of my own, and many from the site). I really wanted functions from those UDFs to show in Scite regardless of the computer I was working on. To that end, I did some digging in the forums for how this was done manually and put this simple (could be improved quite a bit, I'm sure) script together to update the UDF properties and the Calltips api files. It does this by parsing a directory with UDFs in it, extracting functions and calltips and generating the files. It then copies the files to the right locations based on the registry entries. After a restart of Scite, your custom UDF functions are now highlighted and show in the auto complete.

Basically, I keep the function.au3 in my UDF library directory. Whenever I add a new UDF, right under the function definition I create the calltip comment and run the script to update my files. An example would be:

Func Myfunction(myvariable)
;CALLTIP MyFunction("variable")   <- or however you want the calltip to look like.   Just have to have ;CALLTIP in there.

     ;function code

Then the script reads the UDFs and generates the files, excluding the function.au3 and the two other generated files.

The script appends the calltip indicating which UDF should be included to get that function as well.

These are copied to where the registry indicates AutoIt is installed.

Restarting Scite will show all the calltips and code highlighting after that.

#Include <File.au3>
#Include <Array.au3>

$s_path = StringReplace(RegRead("HKEY_CLASSES_ROOT\AutoIt3Script\Shell\Run\Command",""),'"','')
$i_pathlocal = StringInStr($s_path,"\AutoIt3\")
$s_path = StringLeft($s_path,$i_pathlocal)& "AutoIt3\SciTE\"


;get directory listing
$a_files = _GetFiles()

    $fh = FileOpen(@ScriptDir & "\au3.userudfs.properties",2)
    $fh2 = FileOpen(@ScriptDir & "\au3.user.calltips.api",2)
    for $i = 1 to UBound($a_files)-1
        if not(StringInStr("au3.userudfs.properties au3.user.calltips.api function.au3",$a_files[$i])) Then
            Dim $aRecords
            If Not _FileReadToArray($a_files[$i],$aRecords) Then
               MsgBox(4096,"Error", " Error reading log to Array     error:" & @error)
            For $x = 1 to $aRecords[0]
                if StringLeft($aRecords[$x],4) == "Func" Then
                    $s_leftparaloc = StringInStr($aRecords[$x],"(")
                    $aRecords[$x] = StringLeft($aRecords[$x],$s_leftparaloc-1)
                    $aRecords[$x] = StringReplace($aRecords[$x], "func", "")
                    ;ConsoleWrite("au3.keywords.user.udfs=" & StringStripWS($aRecords[$x],7) & @CRLF)
                    FileWrite($fh,"au3.keywords.user.udfs=" & StringStripWS($aRecords[$x],7) & @CRLF)

                if StringLeft($aRecords[$x],8) == ";CALLTIP" Then
                    $aRecords[$x] = StringReplace($aRecords[$x], ";CALLTIP", "")
                    ;ConsoleWrite(StringStripWS($aRecords[$x],7) & @CRLF)
                    FileWrite($fh2,StringStripWS($aRecords[$x],7) & " (#include <" & $a_files[$i] & ">)" & @CRLF)



FileCopy(@ScriptDir & "\au3.userudfs.properties",$s_path & "Properties\" & "au3.userudfs.properties", 1)
FileCopy(@ScriptDir & "\au3.user.calltips.api",$s_path & "Api\" & "au3.user.calltips.api", 1)

MsgBox(0,"Dont forget....", "Restart Scite editor if it is currently running.")

Func _GetFiles()
    If @Error=1 Then
        MsgBox (0,"","No Folders Found.")
    If @Error=4 Then
        MsgBox (0,"","No Files Found.")

    Return $FileList
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Create New...