CallTips automatisch in SciTE eintragen

  • Wer kennt das nicht? Eine neue UDF gefunden und man möchte was damit basteln.
    Aber wie denn bitte, wenn man jeden Befehl noch 20 mal nachschlagen muss?
    Hier also ein kurzes Script, welches die CallTips für ein Script ausliest, und in die au3.user.calltips.api schreibt.

    SciTE muss danach neu gestartet werden.


    /Edit 28.08.2014: Das Script muss unter Umständen als Administrator gestartet werden!

    [Blockierte Grafik: http://i51.tinypic.com/14o0pl3.png]

    Hier gibt es noch eine angepasste Version von Fabian:

    Spoiler anzeigen
    [autoit]

    ;SEuBo - 2010
    ;modified by Fabian 07.2010

    [/autoit] [autoit][/autoit] [autoit]

    Local $sCallTipPath, $sAu3Path, $aFunc, $sFileRead, $aFuncDesc
    ; au3.user.calltips.api
    If Not @Compiled Then
    If @OSArch = "x86" Then
    $sCallTipPath = StringReplace(@AutoItExe, "autoit3.exe", "SciTE\api\au3.user.calltips.api")
    Else
    $sCallTipPath = StringReplace(@AutoItExe, "autoit3_x64.exe", "SciTE\api\au3.user.calltips.api")
    EndIf
    Else
    If @OSArch = "x86" Then
    $sCallTipPath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\SciTE\api\au3.user.calltips.api"
    Else
    $sCallTipPath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\AutoIt v3\AutoIt", "InstallDir") & "\SciTE\api\au3.user.calltips.api"
    EndIf
    EndIf
    _ConsoleWrite(@CRLF)
    _ConsoleWrite("-> Vermute au3.user.calltips.api in " & $sCallTipPath & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    If Not FileExists($sCallTipPath) Then
    _ConsoleWrite("!> au3.user.calltips.api wurde nicht gefunden." & @CRLF)
    MsgBox(64, "", "au3.user.calltips.api wurde nicht gefunden.")
    $sCallTipPath = FileOpenDialog("Calltips Öffnen", @ProgramFilesDir, "AutoIt Calltips (*.api)", Default, "au3.user.calltips.api")
    If @error Then
    _ConsoleWrite("!> Abbruch durch Benutzer." & @CRLF)
    MsgBox(16, "", "Abbruch durch Benutzer.")
    Exit
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    _ConsoleWrite("+> au3.user.calltips.api in " & $sCallTipPath & " lokalisiert." & @CRLF)
    ; the script to extract calltips from
    If $CmdLine[0] > 0 Then
    $sAu3Path = $CmdLine[1]
    _ConsoleWrite("-> Zieldatei per $CmdLine übergeben!" & @CRLF)
    Else
    $sAu3Path = FileOpenDialog("Datei auswählen.", "", "AutoIt Script (*.au3)")
    If @error Then
    _ConsoleWrite("!> Abbruch durch Benutzer." & @CRLF)
    MsgBox(16, "", "Abbruch durch Benutzer.")
    Exit
    EndIf
    _ConsoleWrite("-> Zieldatei per FileOpenDialog übergeben!" & @CRLF)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    _ConsoleWrite("+> " & $sAu3Path & " ist die Zieldatei" & @CRLF)
    ; Gather functions
    $sFileRead = FileRead($sAu3Path)
    $aFunc = StringRegExp($sFileRead, "Func ((\w+)\([^)]*\))", 3)
    If @error Then
    _ConsoleWrite("!> Keine Funktionen in " & $sAu3Path & " gefunden!" & @CRLF)
    MsgBox(16, "", "Keine Funktionen in " & $sAu3Path & " gefunden!")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $iFuncCnt = UBound($aFunc), $aTmp, $sRet
    For $i = 0 To $iFuncCnt - 1 Step 2
    $sRet &= @CRLF & $aFunc[$i]
    $aTmp = StringRegExp($sFileRead, "(?i)(?>\b\Q" & $aFunc[$i + 1] & "\E\b[^:]+(?>description|beschreibung)[^:]+:\S*)([^\v]+)\v", 3)
    If Not @error Then $sRet &= $aTmp[0]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ConsoleWrite("Folgende Funktionen wurden hinzugefügt: " & @CRLF & $sRet & @CRLF)
    FileWrite($sCallTipPath, $sRet)
    MsgBox(64, "", "Fertig")

    [/autoit] [autoit][/autoit] [autoit]

    Func _ConsoleWrite($sText)
    If Not @Compiled Then Return ConsoleWrite($sText)
    If @Compiled Then Return FileWrite(@ScriptDir & "\_Calltips_Debug.txt", $sText)
    EndFunc ;==>_ConsoleWrite

    [/autoit]
  • Kann ich bestätigen.

    Wenn ich das script ausführe dann sagt er mir der er fertig sei, jedoch hat er nichts in die datei geschrieben.

    Wenn ich #RequireAdmin an den anfang setzte dann öffnet sich der Dialog um eine Datei auszuwählen jedoch zeigt Scite schon an das, dass Script schon durcgelaufen ist.

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

  • Merkwürdig. Bei mir funktioniert es ohne Probleme. Da ihr wahrscheinlich beide Win7 oder Vista mit aktivierter UAC habt, war #RequireAdmin schon richtig.

    Wenn ich #RequireAdmin an den anfang setzte dann öffnet sich der Dialog um eine Datei auszuwählen jedoch zeigt Scite schon an das, dass Script schon durcgelaufen ist.

    Sicher? Das hört sich irgendwie widersprüchlich an :S

  • Seubo hast du denn ne ahnung woran das liegen könnte?
    Würde mic sehr freuen wenn ich dein programm benutzen könne :)

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

  • Echt genial :thumbup:
    Sowas kann ich echt gut gebrauchen!
    Ich versuch das mal in SciTE eizubinden...

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Ich habs grade mal versucht :)

    Also wenn ich das Script mit 32bit compile dann funktionert das nicht.
    Wenn ich aber 64bit benutze dann sagt er mir das die "au3.user.calltips.api" nicht gefunden werden konnte, nahdem ich die Datei dann ausgewählt habe Funktioniert das Script

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

  • Hallo Monkey,

    Habe das Script jetzt noch einmal aktualisiert. Vllt funktioniert es jetzt auch unkompiliert bei dir.
    Jedenfalls habe ich das ganze um ein paar Debugzeilen erweitert. Im kompilierten Zustand kommen die Debug Ergebnisse in eine Datei Namens "_Calltips_Debug.txt" im Scriptverzeichniss geschrieben. Im nicht kompilierten Zustand finde die Ausgabe in der SciTE Konsole statt.

  • Hallo SEuBo,

    Wirklich eine Klasse Idee, aber leider funktionierte dein Script nicht von Anfang an.

    Ich war mal so frei und habe das Skript angepasst für 64- Bit Systeme, da bei 64- Bit Systemen ein anderer Regschlüssel ausgelesen werden muss und nicht die "autoit3.exe" sondern die "autoit3_64.exe" ausgeführt wird, ich hoffe das geht in Ordnung.

    Spoiler anzeigen
    [autoit]

    ;SEuBo - 2010
    ;modified by Fabian 07.2010

    [/autoit] [autoit][/autoit] [autoit]

    Local $sCallTipPath, $sAu3Path, $aFunc, $sFileRead, $aFuncDesc
    ; au3.user.calltips.api
    If Not @Compiled Then
    If @OSArch = "x86" Then
    $sCallTipPath = StringReplace(@AutoItExe, "autoit3.exe", "SciTE\api\au3.user.calltips.api")
    Else
    $sCallTipPath = StringReplace(@AutoItExe, "autoit3_x64.exe", "SciTE\api\au3.user.calltips.api")
    EndIf
    Else
    If @OSArch = "x86" Then
    $sCallTipPath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\SciTE\api\au3.user.calltips.api"
    Else
    $sCallTipPath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\AutoIt v3\AutoIt", "InstallDir") & "\SciTE\api\au3.user.calltips.api"
    EndIf
    EndIf
    _ConsoleWrite(@CRLF)
    _ConsoleWrite("-> Vermute au3.user.calltips.api in " & $sCallTipPath & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    If Not FileExists($sCallTipPath) Then
    _ConsoleWrite("!> au3.user.calltips.api wurde nicht gefunden." & @CRLF)
    MsgBox(64, "", "au3.user.calltips.api wurde nicht gefunden.")
    $sCallTipPath = FileOpenDialog("Calltips Öffnen", @ProgramFilesDir, "AutoIt Calltips (*.api)", Default, "au3.user.calltips.api")
    If @error Then
    _ConsoleWrite("!> Abbruch durch Benutzer." & @CRLF)
    MsgBox(16, "", "Abbruch durch Benutzer.")
    Exit
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    _ConsoleWrite("+> au3.user.calltips.api in " & $sCallTipPath & " lokalisiert." & @CRLF)
    ; the script to extract calltips from
    If $CmdLine[0] > 0 Then
    $sAu3Path = $CmdLine[1]
    _ConsoleWrite("-> Zieldatei per $CmdLine übergeben!" & @CRLF)
    Else
    $sAu3Path = FileOpenDialog("Datei auswählen.", "", "AutoIt Script (*.au3)")
    If @error Then
    _ConsoleWrite("!> Abbruch durch Benutzer." & @CRLF)
    MsgBox(16, "", "Abbruch durch Benutzer.")
    Exit
    EndIf
    _ConsoleWrite("-> Zieldatei per FileOpenDialog übergeben!" & @CRLF)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    _ConsoleWrite("+> " & $sAu3Path & " ist die Zieldatei" & @CRLF)
    ; Gather functions
    $sFileRead = FileRead($sAu3Path)
    $aFunc = StringRegExp($sFileRead, "Func ((\w+)\([^)]*\))", 3)
    If @error Then
    _ConsoleWrite("!> Keine Funktionen in " & $sAu3Path & " gefunden!" & @CRLF)
    MsgBox(16, "", "Keine Funktionen in " & $sAu3Path & " gefunden!")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $iFuncCnt = UBound($aFunc), $aTmp, $sRet
    For $i = 0 To $iFuncCnt - 1 Step 2
    $sRet &= @CRLF & $aFunc[$i]
    $aTmp = StringRegExp($sFileRead, "(?i)(?>\b\Q" & $aFunc[$i + 1] & "\E\b[^:]+(?>description|beschreibung)[^:]+:\S*)([^\v]+)\v", 3)
    If Not @error Then $sRet &= $aTmp[0]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ConsoleWrite("Folgende Funktionen wurden hinzugefügt: " & @CRLF & $sRet & @CRLF)
    FileWrite($sCallTipPath, $sRet)
    MsgBox(64, "", "Fertig")

    [/autoit] [autoit][/autoit] [autoit]

    Func _ConsoleWrite($sText)
    If Not @Compiled Then Return ConsoleWrite($sText)
    If @Compiled Then Return FileWrite(@ScriptDir & "\_Calltips_Debug.txt", $sText)
    EndFunc ;==>_ConsoleWrite

    [/autoit]

    Lg, Fabian