SciTE Individualisierung - Ermitteln freier command-Nummern

    • Offizieller Beitrag

    Hi,
    wer im SciTE-Menü eigene Skripte, Tools etc. einbindet muß dafür dem Befehl eine Nummer zuweisen (command.Nr....).
    Die Anzahl der Nummern ist begrenzt auf 50 ( 0-49 ) und bei Installation von ScITE4AutoIt sind gleich mal 35 verbraten ;( . Über die SciTE-Konfiguration (in SciTE Strg+1 <Tools-Selection>) könnt ihr auswählen welche dieser Tools ihr überhaupt möchtet. Ich verwende kaum ein Drittel davon.
    Habt ihr dort Tools abgewählt, stehen die command-Nummern zur freien Verfügung und können von euch in den SciTEUser.properties eigenständig belegt werden.
    Damit ihr nicht beide properties-Dateien händisch durchsuchen müßt nach freien command-Nummern, habe ich dafür ein kleines Skript erstellt.

    Kleiner Tipp:
    Verwendet als erstes die Nummern 36-49. Erst wenn ihr damit nicht mehr ausreicht, solltet ihr die Nummern der deaktivierten Tools verwenden.
    Hintergrund: Kommt eine neue SciTE-Version, dann werden die Tools alle wieder aktiv installiert. Vergeßt ihr diese zu deaktivieren kann das in Einzelfällen zu Konflikten mit euren Einträgen in den User.properties führen, falls z.B. bei den Tools ein Befehlsdetail mehr als bei euch zur gleichen Nummer hinterlegt ist.
    Grundsätzlich haben alle Einträge in den User.properties höchste Priorität. Deshalb sollte man auch ausschließlich dort Einträge vornehmen.


    OK, Anhängen geht nicht. 2 kB ist viiieeel zu riesig für WoltLab: Die Datei _GetFreeCommandNum[0.1].au3 ist zu groß (PHP Limit). :wacko:
    Also müßt ihr kopieren. ;)

    Spoiler anzeigen
    [autoit]

    #Region - TimeStamp
    ; 2012-04-02 12:49:28 v 0.1
    #EndRegion - TimeStamp
    #include <File.au3>

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

    $sPath1 = StringTrimRight(@AutoItExe, StringLen(@AutoItExe)-StringInStr(@AutoItExe, '\', 1, -1)) & 'SciTE\properties\au3.properties'
    $sPath2 = @HomeDrive & @HomePath & '\SciTEUser.properties'
    $sUsed = ''

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

    _GetUsed($sPath1, $sUsed)
    _GetUsed($sPath2, $sUsed)

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

    Local $aUsed = StringSplit(StringTrimRight($sUsed, 1), ' '), $sFree = '', $fFound
    For $i = 0 To 49
    $fFound = False
    For $j = 1 To $aUsed[0]
    If $aUsed[$j] = $i Then
    $fFound = True
    ExitLoop
    EndIf
    Next
    If Not $fFound Then $sFree &= $i & ' '
    Next
    $sFree = StringTrimRight($sFree, 1)
    ConsoleWrite('! Freie command-Zahlen: ' & $sFree & @CRLF)

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

    Func _GetUsed($_path, ByRef $_s)
    Local $aFile, $aMatch, $sUsed = ''
    _FileReadToArray($_path, $aFile)
    For $i = 1 To $aFile[0]
    If StringRegExp($aFile[$i], '^b?command\.\d{1,2}.+') Then
    $aMatch = StringRegExp($aFile[$i], '^b?command\.(\d{1,2}).+', 3)
    $_s &= $aMatch[0] & ' '
    EndIf
    Next
    EndFunc

    [/autoit]
  • Da hatt wohl jemand an der PHP.ini rumgespielt und die Dateigrenze runtergedreht. Das kommt nicht vom WBB.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #include <array.au3>
    #include <file.au3>
    #include <Math.au3>

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

    #Region Examples GetCommandNumber
    Global $_SciTEParentPath = StringReplace(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\SciTE.exe", ""), "\SciTE.exe", '')
    Global $_SciTEUserPropPath = @UserProfileDir & '\SciTEUser.properties'
    Global $_au3PropPath = $_SciTEParentPath & '\Properties\au3.properties'

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

    Local $CmdNr = _GetCmdNbToUse()

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

    ConsoleWrite(@CRLF & "+ free command number : " & $CmdNr & @CRLF & @CRLF)
    #EndRegion Examples GetCommandNumber

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

    #Region GetCommandNumber
    Func _GetCmdNbToUse() ; The command number can be in the range of 0 to 49.
    $_LastCmdNbInau3Prop = _GetLastCmdNbInFile($_au3PropPath)
    If $_LastCmdNbInau3Prop = -1 Then Return SetError(1, 0, 0)
    $_LastCmdNbInSciTEUserProp = _GetLastCmdNbInFile($_SciTEUserPropPath)
    If $_LastCmdNbInSciTEUserProp = -1 Then Return SetError(1, 0, 1)
    Return _Max($_LastCmdNbInau3Prop, $_LastCmdNbInSciTEUserProp) + 1
    EndFunc ;==>_GetCmdNbToUse

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

    Func _GetLastCmdNbInFile($_Au3_PropertiesPath)
    Local $_FileReadArray
    If Not _FileReadToArray($_Au3_PropertiesPath, $_FileReadArray) Then Return -1
    $_FileReadArray = _DeleteArrayElementWithoutString($_FileReadArray, 'command.name.')
    If $_FileReadArray = '' Then Return
    Return Number(StringRegExpReplace(StringLeft($_FileReadArray[UBound($_FileReadArray) - 1], 16), '(?i)[^0-9]', ''))
    EndFunc ;==>_GetLastCmdNbInFile
    #EndRegion GetCommandNumber

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

    #Region Array
    Func _DeleteArrayElementWithoutString($_Array, $_String)
    Local $_Item, $_SearchString
    For $_Element In $_Array
    If FileExists($_Element) Then
    $_SearchString = FileRead($_Element)
    Else
    $_SearchString = $_Element
    EndIf
    If StringInStr($_SearchString, $_String) = 0 Then
    _ArrayDelete($_Array, $_Item)
    Else
    $_Item += 1
    EndIf
    Next
    Return ($_Array)
    EndFunc ;==>_DeleteArrayElementWithoutString
    #EndRegion Array

    [/autoit]


    @fire4orce

  • Ich vereinfacht den Code vorgeschlagen durch fire4orce@it :whistling:

    Spoiler anzeigen


    [autoit]

    #include <Array.au3>
    #include <File.au3>

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

    Global $_SciTEUserPropPath = @UserProfileDir & '\SciTEUser.properties'
    Global $_au3PropPath = StringReplace ( RegRead ( 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\SciTE.exe', ''), '\SciTE.exe', '' ) & '\Properties\au3.properties'
    ConsoleWrite ( '!> Free command number : ' & _SciTEGetCmdNbToUse ( ) & @Crlf )

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

    Func _SciTEGetCmdNbToUse ( )
    Local $_FileReadArray1 = _GetCommandNameArray ( $_au3PropPath, 'command.name.' ), $_FileReadArray2 = _GetCommandNameArray ( $_SciTEUserPropPath, 'command.name.' )
    For $_I = $_FileReadArray1[UBound ( $_FileReadArray1 ) - 1] + 1 To 49
    If _ArraySearch ( $_FileReadArray2, $_I, 1, 0, 0, 1 ) = -1 Then Return $_I
    Next
    EndFunc ;==> _SciTEGetCmdNbToUse ( )

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

    Func _GetCommandNameArray ( $_FilePath, $_String )
    Local $_Array, $_RetArray[1], $_FindAll
    _FileReadToArray ( $_FilePath, $_Array )
    $_FindAll = _ArrayFindAll ( $_Array, $_String, 0, 0, 0, 1 )
    For $_I = 0 To UBound ( $_FindAll ) -1
    _ArrayAdd ( $_RetArray, Number ( StringRegExpReplace ( StringLeft ( $_Array[$_FindAll[$_I]], 16), '(?i)[^0-9]', '' ) ) )
    Next
    Return $_RetArray
    EndFunc ;==> _GetCommandNameArray ( )

    [/autoit]

    2 Mal editiert, zuletzt von wakillon (20. Juni 2012 um 20:34)