Abkürzungen in SciTE verwalten

    • Offizieller Beitrag

    Hi,
    ich hab hier ein Skript erstellt mit dem die Abbrevs aus SciTE verwaltet werden können.
    • Beim Start werden die vorhandenen Abkürzungen abgerufen und in einem Listview dargestellt.
    • Mit Klick auf eine Abkürzung wird der rekonstruierte Code in einem Extra-Fenster dargestellt. Dadurch läßt sich viel besser verstehen, wofür denn diese Abkürzung steht.
    • Eigene Abkürzungen können hinzugefügt werden - einfach die Abkürzung eintragen und den zugehörigen Code in das Editfenster kopieren oder dort direkt schreiben. Beim Schließen des Fensters wird der Code dann umgewandelt und in die Datei geschrieben.

    Edit 15.08.2011Neue Version v1.1
    Ich habe das Skript nochmal überarbeitet mit folgenden Änderungen:
    • Der Startbereich spielt keine Rolle mehr, das Skript erkennt auch ohne diese Markierung die Abbrevs.
    • Da leider in den Original-Dateien doppelte Abbrevs sind, läuft beim Erststart einmalig eine Überprüfung auf Mehrfacheinträge. Es wird dann nur das erste Vorkommen beibehalten, weitere werden in der Datei auskommentiert.
    • Es gibt einen neuen Menüpunkt "Keywords". Falls ihr den Eindruck haben solltet, dass nicht alle Keys vorhanden sind (Eingabe der Abkürzung färbt diese nicht rot), obwohl "Key=Abbrev" in der Liste stehen ==> einfach die Keyworddatei aus eurer Liste neu erstellen lassen.
    • Die Farbdarstellung wird euch nun auch keinen Augenkrebs mehr bereiten. :D
    Die "abbrev.properties" scheint von den Entwicklern aber weitestgehend ignoriert zuwerden. Anders läßt sich ein derart schlampiger Umgang damit nicht erklären (3 doppelte Einträge, Abbrevs für längst gestorbene Befehle: AdlibEnable, AdlibDisable). Ich werde mich mal daran machen und diese Datei mit etwas sinnvolleren Inhalten zu füllen. Viele der vorhandenen Abbrevs werden vermutlich niemals zum Einsatz kommen.

    Edit 14.08.2011
    Durch die neue Version 2.27 von SciTE4AutoIt ist eine Änderung in Codezeile #25 erforderlich, da der Startbereich jetzt anders definiert wird.

    [autoit]

    Global $Start_STR = '#; -- Gui Variables --', $start = False, $edit = False

    [/autoit]

    ist mit

    [autoit]

    Global $Start_STR = "#- 'A B B R E V I A T I O N S F O R A U T O I T F I N A L' -#", $start = False, $edit = False

    [/autoit]

    zu ersetzen.

    Edit:
    Fast vergessen: Jetzt noch das Eintragen der neuen Keywords in die "au3.keywords.abbreviations.properties" bei neuen Abkürzungen hinzugefügt.
    Eines ist vielleicht nicht ganz unwichtig: Bei der Installation einer neuen Version von SciTE wird leider die abbrev Datei überschrieben. Ein einfaches Rückschreiben einer gesicherten (eigenen) Version geht hier nicht, da die neu installierte Version ja erweiterte Inhalte hat. Mal sehen ob ich da noch eine brauchbare Lösung finde.

    Edit 21.12.2009
    Da hatte ich doch versehentlich die Sicherung der Keys im properties-Ordner erstellt. Das war natürlich Blödsinn, da alle SciTE-Ordner bei Update/Neuinstallation samt Inhalt gelöscht werden.
    Jetzt wird die Sicherungsdatei ebenfalls im @UserProfileDir erstellt. Wenn ihr schon eigene Abbrevs erstellt habt mit der Version von gestern: einfach die Datei: "SciTE\properties\au3.keywords.abbreviations.properties.my" umbenennen und verschieben in: @UserProfileDir & "\au3.keywords.my"

    Hmm, da hatten sich doch glatt zwei Fehler eingeschlichen. Bei Edit und Delete - nun gefixt. Außerdem habe ich jetzt (Danke an Jos) eine Reload-Funktion eingebunden, sodass die Änderungen auch ohne Neustart von SciTE aktiv werden.

    Edit 20.12.2009
    So, das Problem der Wiederherstellung selbst erstellter/modifizierter Abbrevs nach einem SciTE-Update (od. Neuinstallation) ist gelöst.
    Während der Erstellung/Modifikation von Abbrevs werden die eigenen Abbrevs und Keywords in separaten Dateien abgelegt. Über das Menü 'Wiederherstellen' können die eigenen Abbrevs und Keywords wieder in die Originaldateien eingefügt werden.
    Das Aufrufen dieses Menüpunktes in der aktuellen (bereits modifizierten Version) bleibt ohne Folgen.

    Edit 08.07.2008
    Ich habe mir jetzt eine Integration für SciTE gemacht, sodass über eine Tastenkombination das Tool geöffnet wird.
    Dazu einen Eintrag in die SciTEUser.properties ausführen. Ich habe im Scite-Ordner ein Verzeichnis Abbrev angelegt und dorthinein das kompilierte Programm AbbrevVerwaltung.exe gespeichert. Wenn ihr andere Namen oder Ordner verwendet, entsprechend eine Anpassung durchführen.
    Die folgenden Zeilen müssen zwingend an den Anfang der Datei geschrieben werden!
    Solltet ihr noch keinen individuellen Eintrag dort stehen haben (z.B. Organize Includes) dann könnt ihr statt 37 die 36 verwenden.
    Den Shortcut könnt ihr natürlich selbst festlegen (aber schauen, ob er nicht von SciTE schon vorbelegt ist).

    Code
    # 37 Abbrev-Verwaltung
    command.37.*.au3="$(SciteDefaultHome)\Abbrev\AbbrevVerwaltung.exe"
    command.name.37.*.au3=Abbrev Verwaltung
    command.save.before.37.*.au3=1
    command.is.filter.37.*.au3=1
    command.shortcut.37.*.au3=Ctrl+Alt+A

    Edit 21.03.2008 Neue Version
    Der Pfad für die Properties liegt jetzt in einem eigenen Ordner. Programm entsprechend angepaßt.
    Ohne Anpassung werden die Kürzel nicht in die au3.keywords.abbreviations.properties geschrieben und stehen demzufolge nicht zur Verfügung.

    Edit 12.02.08
    • bestehende Abkürzungen können bearbeitet werden
    • Abkürzungen können gelöscht werden


    AbbrevVerwaltung v1.1
    [autoit]

    #Region - TimeStamp
    ; 2011-08-15 13:41:03 v 1.1
    #EndRegion - TimeStamp

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

    #include-once
    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <GUIListView.au3>
    #include <GuiEdit.au3>
    Opt("GUIOnEventMode", 1)

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

    Global $ScitePath = RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\SciTE.exe", "")
    Global $KeyWordPath = StringReplace($ScitePath, "SciTE.exe", "properties\au3.keywords.abbreviations.properties")
    Global $MyKeyWordPath = @UserProfileDir & '\au3.keywords.my'
    Global $Abbr_Path = @UserProfileDir & '\abbrev.properties'
    Global $MyAbbrevPath = @UserProfileDir & '\abbrev.properties.my'
    If Not FileExists($MyAbbrevPath) Then
    Local $fh = FileOpen($MyAbbrevPath, 1)
    FileWriteLine($fh, '; >> My own abbrevs <<')
    FileClose($fh)
    EndIf
    Global $edit = False
    Global $Last_STR = '#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#'
    Global $txt, $aTitel[2] = ['Code für neue Abkürzung', 'Code bearbeiten']
    Global $aLabel[2] = [ _
    'Bitte den Code für die Abkürzung einfügen. Einrückungen bitte mit Tabulator (Im Editfeld durch STRG+TAB).' & @LF & _
    'Für die gewünschte Cursorposition: | verwenden. Der Code wird beim Schließen des Fensters übernommen.', _
    'Hier den Code bearbeiten. Einrückungen bitte mit Tabulator (Im Editfeld durch STRG+TAB).' & @LF & _
    'Für die gewünschte Cursorposition: | verwenden. Der Code wird beim Schließen des Fensters übernommen.']
    Global $sAbbrev, $aAbbrevFile, $aAbbrev[1][2]

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

    ; == Bei erstmaligem Start ausführen
    ; == erstes Vorkommen eines Abbrev werden behalten - weitere auskommentiert mit: '#; CHANGED abbrev'
    If Not FileExists(@UserProfileDir & '\AbbrevDoubleCheck.done') Then
    MsgBox(64, 'Erststart', 'Einmalige Überprüfung auf doppelte Abbrevs.' & @LF & 'Jetzt starten', 3)
    Local $sToWrite = 'No Double'
    Local $ret = _SetDoubleAsComment()
    If $ret <> '' Then $sToWrite = $ret
    FileWrite(@UserProfileDir & '\AbbrevDoubleCheck.done', $sToWrite)
    MsgBox(64, 'Doppelüberprüfung', 'Das Ergebnis der Überprüfung ist in der Datei:' & @LF & @LF & @UserProfileDir & '\AbbrevDoubleCheck.done' & @LF & @LF & 'dokumentiert. ' & _
    'Das erste Vorkommen eines Abbrev wurde behalten, weitere wurden auskommentiert.' & @LF & 'Um später nochmals eine Überprüfung auf Doppel durchzuführen' & @LF & _
    '(empfehlenswert nach einem Update von SciTE), einfach diese Ergebnisdatei löschen.')
    EndIf
    ; == Ende Double Check

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

    _FileReadToArray($Abbr_Path, $aAbbrevFile)
    Local $ret, $aIndex, $aCheck = $aAbbrevFile
    ReDim $aAbbrev[$aCheck[0]][2]
    For $i = 1 To $aCheck[0]
    If StringRegExp($aCheck[$i], "(\A\w+)=(.+)") Then
    $ret = _SplitOnce($aCheck[$i])
    $aAbbrev[0][0] += 1
    $aAbbrev[$aAbbrev[0][0]][0] = $ret[0]
    $aAbbrev[$aAbbrev[0][0]][1] = $ret[1]
    EndIf
    Next
    Local $aTmp[$aAbbrev[0][0]+1][2]
    $aTmp[0][0] = $aAbbrev[0][0]
    For $i = 1 To $aTmp[0][0]
    $aTmp[$i][0] = $aAbbrev[$i][0]
    $aTmp[$i][1] = $aAbbrev[$i][1]
    Next
    $aAbbrev = $aTmp
    $aTmp = 0

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

    $Form1 = GUICreate("Abkürzungen verwalten [" & $Abbr_Path & ']', 800, 620, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    $mnu = GUICtrlCreateMenu('Wiederherstellung')
    $mnu_restore = GUICtrlCreateMenuItem('Wiederherstellung eigener Abbrevs', $mnu)
    GUICtrlSetOnEvent(-1, '_Restore')
    $mnuKey = GUICtrlCreateMenu('Keywords')
    $mnu_keycreate = GUICtrlCreateMenuItem('Keyword-Datei neu erstellen', $mnuKey)
    GUICtrlSetOnEvent(-1, '_KeyCreate')
    $iSearch = GUICtrlCreateInput('', 15, 10, 90, 20)
    $bSearch = GUICtrlCreateButton('Suchen', 125, 10, 150, 20, $BS_DEFPUSHBUTTON)
    GUICtrlSetOnEvent(-1, '_Search')
    $bCreate = GUICtrlCreateButton('Hinzufügen', 295, 10, 150, 20)
    GUICtrlSetOnEvent(-1, '_Create')
    $bEdit = GUICtrlCreateButton('Bearbeiten', 465, 10, 150, 20)
    GUICtrlSetOnEvent(-1, '_Edit')
    $bDelete = GUICtrlCreateButton('Löschen', 635, 10, 150, 20)
    GUICtrlSetOnEvent(-1, '_Delete')
    $ListView1 = GUICtrlCreateListView("Abkürzung|Code", 15, 40, 770, 545, BitOR($LVS_SHOWSELALWAYS,$LVS_SINGLESEL,$WS_HSCROLL,$WS_VSCROLL))
    GUICtrlSetOnEvent(-1, "ListView1Click")
    GUICtrlSetBkColor(-1, 0xF0F8FF)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)
    GUICtrlSendMsg(-1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_ONECLICKACTIVATE, $LVS_EX_ONECLICKACTIVATE)
    _GUICtrlListView_SetColumnWidth(-1, 0, 90)
    _GUICtrlListView_SetColumnWidth(-1, 1, $LVSCW_AUTOSIZE_USEHEADER)

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

    _LV_Fill()

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

    $Form2 = GUICreate('Code zur Abkürzung', 700, 400, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close")
    $Edit1 = GUICtrlCreateEdit('', 10, 10, 680, 380, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
    GUICtrlSetBkColor(-1, 0x98FB98)

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

    $Form3 = GUICreate('Code für neue Abkürzung', 700, 400, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form3Close")
    $Label1 = GUICtrlCreateLabel('Bitte den Code für die Abkürzung einfügen. Einrückungen bitte mit Tabulator (Im Editfeld durch STRG+TAB).' & @LF & _
    'Für die gewünschte Cursorposition: | verwenden. Der Code wird beim Schließen des Fensters übernommen.' _
    , 10, 5, 680, 30, $SS_SUNKEN+$SS_CENTER)
    GUICtrlSetBkColor(-1, 0x98FB98)
    $Edit2 = GUICtrlCreateEdit('', 10, 40, 680, 350, BitOR($WS_HSCROLL,$WS_VSCROLL,$ES_MULTILINE,$ES_WANTRETURN))
    GUICtrlSetBkColor(-1, 0x98FB98)

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

    GUISetState(@SW_SHOW, $Form1)
    GUIRegisterMsg($WM_NOTIFY, "MY_WM_COMMAND")

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

    While 1
    Sleep(100)
    WEnd

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

    Func Form1Close()
    Exit
    EndFunc ;==>Form1Close

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

    Func Form2Close()
    GUISetState(@SW_HIDE, $Form2)
    GUICtrlSetData($Edit1, '')
    EndFunc ;==>Form2Close

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

    Func Form3Close()
    GUISetState(@SW_HIDE, $Form3)
    If $edit Then
    _WriteEditedAbbrev()
    Else
    _WriteNewAbbrev()
    EndIf
    EndFunc ;==>Form3Close

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

    Func _SetDoubleAsComment()
    _FileReadToArray($Abbr_Path, $aAbbrevFile)
    Local $oDouble = ObjCreate("Scripting.Dictionary"), $sRet = ''
    For $i = 1 To $aAbbrevFile[0]
    If StringRegExp($aAbbrevFile[$i], "(\A\w+)=(.+)") Then
    $KEYWORD = StringLeft($aAbbrevFile[$i], StringInStr($aAbbrevFile[$i], '=', 1, 1) - 1)
    If $oDouble.Exists($KEYWORD) Then
    ContinueLoop
    EndIf
    $aIndex = _CheckOccurences($aAbbrevFile, $KEYWORD)
    $sTmp = ''
    If $aIndex[0] > 1 Then
    For $j = 1 To $aIndex[0]
    $sTmp &= $aIndex[$j] & ','
    If $j > 1 Then
    $aAbbrevFile[$aIndex[$j]] = '#; CHANGED ' & $aAbbrevFile[$aIndex[$j]] ; == Doppel auskommentieren
    $sRet &= 'Zeile ' & $i & ': ' & $aAbbrevFile[$aIndex[$j]] & @CRLF
    EndIf
    Next
    $oDouble.Add($KEYWORD, StringTrimRight($sTmp, 1))
    EndIf
    EndIf
    Next
    If $oDouble.Count > 0 Then _ObjDictList($oDouble, 'Doppel in "abbrev.properties", auskommentiert mit: #; CHANGED', 'Abbrev', 'Zeilen')
    _FileWriteFromArray($Abbr_Path, $aAbbrevFile, 1)
    Return $sRet
    EndFunc

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

    Func _CheckOccurences($aArray, $sToCheck, $iStart=1)
    Local $aIndex[1] = [0]
    For $i = $iStart To UBound($aArray) -1
    If StringLeft($aArray[$i], StringLen($sToCheck)+1) = $sToCheck & '=' Then
    $aIndex[0] += 1
    ReDim $aIndex[$aIndex[0] +1]
    $aIndex[$aIndex[0]] = $i
    EndIf
    Next
    Return $aIndex
    EndFunc

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

    ;==================================================================================================
    ; Name: _ObjDictList($oDICT [, $TITLE='Elemente: Objekt Dictionary'])
    ; Parameter: $oDICT - Handle des Dictionary-Objektes
    ; $TITLE - Fenstertitel (optional)
    ; Return: Erfolg: GUI mit ListView
    ; Fehler: -1 @Error=1 Objekt existiert nicht
    ; Requirements: #include <GuiConstants.au3>
    ; #include <GuiListView.au3>
    ;==================================================================================================
    Func _ObjDictList(ByRef $oDICT, $TITLE = 'Elemente: Objekt Dictionary', $sKey='Schlüssel', $sValue='Wert')
    If Not IsObj($oDICT) Then Return SetError(1, 0, -1)
    Local $count = $oDICT.Count
    Local $SaveMode = Opt("GUIOnEventMode", 0), $ListGUI, $oDictLV, $btnClose, $msg
    $ListGUI = GUICreate($TITLE, 600, 400, (@DesktopWidth - 600) / 2, (@DesktopHeight - 400) / 2)
    $btnClose = GUICtrlCreateButton('&Ende', 40, 360, 70, 22)
    GUICtrlSetResizing($btnClose, BitOR($GUI_DockRight, $GUI_DockBottom, $GUI_DockSize))
    GUICtrlDelete($oDictLV)
    $oDictLV = GUICtrlCreateListView($sKey & '|' & $sValue, 10, 10, 580, 340, BitOR($LVS_SHOWSELALWAYS, _
    $LVS_EDITLABELS), BitOR($LVS_EX_GRIDLINES, $LVS_EX_HEADERDRAGDROP, $LVS_EX_FULLROWSELECT, $LVS_EX_REGIONAL))
    If $count > 0 Then
    Local $strKey, $colKeys = $oDICT.Keys
    For $strKey In $colKeys
    GUICtrlCreateListViewItem($strKey & '|' & $oDICT.Item($strKey), $oDictLV)
    Next
    Else
    WinSetTitle($ListGUI, '', 'Das Objekt Dictionary enthält keine Elemente!')
    EndIf
    GUISetState(@SW_SHOW, $ListGUI)
    While 1
    $msg = GUIGetMsg(1)
    If $msg[1] = $ListGUI And _
    ($msg[0] = $GUI_EVENT_CLOSE Or $msg[0] = $btnClose) Then ExitLoop
    WEnd
    GUIDelete($ListGUI)
    Opt("GUIOnEventMode", $SaveMode)
    EndFunc ;==>_ObjDictList

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

    Func _KeyCreate()
    Local $KEYWORD, $sToWrite = 'au3.keywords.abbrev=', $txtZeile = '', $len
    _FileReadToArray($Abbr_Path, $aAbbrevFile)
    For $i = 1 To $aAbbrevFile[0]
    If StringRegExp($aAbbrevFile[$i], "(\A\w+)=(.+)") Then
    $KEYWORD = StringLeft($aAbbrevFile[$i], StringInStr($aAbbrevFile[$i], '=', 1, 1) - 1)
    $len = StringLen($txtZeile) + 4
    If $len + StringLen($KEYWORD) > 100 Then
    $sToWrite &= $txtZeile & "\" & @CRLF
    $txtZeile = @TAB & $KEYWORD & " "
    Else
    $txtZeile &= $KEYWORD & " "
    EndIf
    EndIf
    Next
    $sToWrite &= $txtZeile
    FileMove($KeyWordPath, $KeyWordPath & '.BAK', 1)
    Local $fh = FileOpen($KeyWordPath, 2)
    FileWrite($fh, $sToWrite)
    FileClose($fh)
    EndFunc ;==>_KeyCreate

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

    Func _Search()
    $txt = GUICtrlRead($iSearch)
    If $txt = '' Then Return
    Local $indx = _LV_FindInSubItem($ListView1, $txt, 0)
    If $indx = -1 Then Return MsgBox(0, 'Suche Abbrev', 'Abbrev: "' & $txt & '" existiert nicht.')
    GUICtrlSetState($ListView1, $GUI_FOCUS)
    _GUICtrlListView_EnsureVisible($ListView1, $indx)
    _GUICtrlListView_SetItemSelected($ListView1, $indx)
    _GUICtrlListView_SetItemFocused($ListView1, $indx)
    EndFunc ;==>_Search

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

    Func _Create()
    $txt = GUICtrlRead($iSearch)
    If $txt = '' Then Return MsgBox(16, 'Fehler', 'Keine Abkürzung eingetragen.')
    Local $indx = _LV_FindInSubItem($ListView1, $txt, 0)
    If $indx > -1 Then Return MsgBox(16, 'Fehler', 'Die Abkürzung existiert bereits.')
    $edit = False
    WinSetTitle($Form3, '', $aTitel[0] & ' [ ' & $txt & ' ]')
    GUICtrlSetData($Label1, $aLabel[0])
    GUISetState(@SW_SHOW, $Form3)
    EndFunc

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

    Func _Edit()
    $txt = GUICtrlRead($iSearch)
    If $txt = '' Then Return MsgBox(16, 'Fehler', 'Keine Abkürzung ausgewählt.')
    $edit = True
    WinSetTitle($Form3, '', $aTitel[1] & ' [ ' & $txt & ' ]')
    GUICtrlSetData($Label1, $aLabel[1])
    $sAbbrev = _GUICtrlListView_GetItemText($ListView1, _LV_FindInSubItem($ListView1, $txt, 0), 1)
    GUICtrlSetData($Edit2, _Abbrev2Code($sAbbrev))
    GUISetState(@SW_SHOW, $Form3)
    EndFunc ;==>_Edit

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

    Func _Restore()
    Local $aMyAbbrev, $split_f, $index
    _FileReadToArray($MyAbbrevPath, $aMyAbbrev)
    For $i = 2 To UBound($aMyAbbrev) - 1
    $split_f = _SplitOnce($aMyAbbrev[$i])
    If @error Then ContinueLoop
    $index = _ArraySearch($aAbbrev, $split_f[0], 1)
    If Not @error Then ; == gefunden, Abbrev ändern > in Array: $aAbbrev
    $aAbbrev[$index][1] = $split_f[1]
    WinSetTitle($Form1, '', 'Restore Abbrev: ' & $split_f[0])
    Else ; == Abbrev existiert nicht ==> Erstellen > in Array: $aAbbrev
    $aAbbrev[0][0] += 1
    ReDim $aAbbrev[$aAbbrev[0][0] +1][2]
    $aAbbrev[$aAbbrev[0][0]][0] = $split_f[0]
    $aAbbrev[$aAbbrev[0][0]][1] = $split_f[1]
    WinSetTitle($Form1, '', 'Restore Abbrev: ' & $split_f[0])
    EndIf
    ; == jetzt noch in $aAbbrevFile ändern zum Zurückschreiben in die Abbrev-Datei
    $index = -1
    For $j = 1 To $aAbbrevFile[0]
    If StringLeft($aAbbrevFile[$j], StringLen($split_f[0] +1)) = $split_f[0] & '=' Then
    $index = $j
    ExitLoop
    Else
    ContinueLoop
    EndIf
    Next
    If $index > -1 Then ; == gefunden, Abbrev ändern > in Array: $aAbbrevFile
    $aAbbrevFile[$index] = $aMyAbbrev[$i]
    Else
    ReDim $aAbbrevFile[$aAbbrevFile[0] + 1]
    $aAbbrevFile[0] += 1
    $aAbbrevFile[$aAbbrevFile[0]] = $aMyAbbrev[$i] ; == Abbrev am Ende anfügen
    For $j = $aAbbrevFile[$aAbbrevFile[0]] To 1 Step -1
    If $aAbbrevFile[$j] = $Last_STR Then ExitLoop
    Next
    _ArraySwap($aAbbrev[UBound($aAbbrev) - 1], $aAbbrev[$j]) ; == Eintrag verschieben vor die End-Linie
    EndIf
    Next
    ; == bestehende Abbrev-Datei sichern und Abbrev-Datei neu schreiben
    FileMove($Abbr_Path, $Abbr_Path & '.BAK', 1)
    _FileWriteFromArray($Abbr_Path, $aAbbrevFile, 1)
    ; == Schlüsselwörter ergänzen
    If FileExists($MyKeyWordPath) Then
    Local $aMyKeyWord
    _FileReadToArray($MyKeyWordPath, $aMyKeyWord)
    For $i = 1 To UBound($aMyKeyWord) - 1
    WinSetTitle($Form1, '', 'Restore Keyword: ' & $aMyKeyWord[$i])
    Sleep(20)
    _KeyWordSet($aMyKeyWord[$i], 1)
    Next
    EndIf
    WinSetTitle($Form1, '', 'Restore')
    MsgBox(64, 'Restore', 'Restore beendet.', 1.5)
    WinSetTitle($Form1, '', "Abkürzungen verwalten [" & $Abbr_Path & ']')
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView1))
    _LV_Fill()
    Reload_Config()
    EndFunc ;==>_Restore

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

    Func _LV_FindInSubItem($hWnd, $2Find, $SubIndex)
    Local $out = -1
    For $i = 0 To _GUICtrlListView_GetItemCount($hWnd) - 1
    If _GUICtrlListView_GetItemText($hWnd, $i, $SubIndex) = $2Find Then $out = $i
    Next
    Return $out
    EndFunc ;==>_LV_FindInSubItem

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

    Func ListView1Click()
    Local $indx = _GUICtrlListView_GetHotItem($ListView1)
    GUICtrlSetData($iSearch, _GUICtrlListView_GetItemText($ListView1, $indx, 0))
    GUICtrlSetData($Edit1, _Abbrev2Code(_GUICtrlListView_GetItemText($ListView1, $indx, 1)))
    WinSetTitle($Form2, '', 'Code zur Abkürzung [ ' & GUICtrlRead($iSearch) & ' ]')
    GUISetState(@SW_SHOW, $Form2)
    EndFunc ;==>ListView1Click

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

    Func _LV_Fill()
    GUISetState(@SW_LOCK, $Form1)
    Local $CtrlID
    For $i = 1 To $aAbbrev[0][0]
    $CtrlID = GUICtrlCreateListViewItem('|', $ListView1)
    GUICtrlSetBkColor($CtrlID, 0xE6E8FA)
    _GUICtrlListView_SetItemText($ListView1, $i-1, $aAbbrev[$i][0], 0)
    _GUICtrlListView_SetItemText($ListView1, $i-1, $aAbbrev[$i][1], 1)
    Next
    GUISetState(@SW_UNLOCK, $Form1)
    EndFunc ;==>_LV_Fill

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

    Func _SplitOnce($STRING, $DELIM = '=')
    If Not StringInStr($STRING, $DELIM) Then Return SetError(1, 0, 1)
    Local $out[2]
    Local $len = StringLen($STRING)
    Local $pos = StringInStr($STRING, $DELIM, 1, 1)
    $out[0] = StringLeft($STRING, $pos - 1)
    $out[1] = StringRight($STRING, $len - $pos)
    Return $out
    EndFunc ;==>_SplitOnce

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

    Func _Abbrev2Code($ABBREV)
    Local $out = ''
    $var = StringSplit($ABBREV, '\n', 1)
    For $i = 1 To UBound($var) - 1
    If StringInStr($var[$i], '\t', 1) Then $var[$i] = StringReplace($var[$i], '\t', @TAB)
    If $i = UBound($var) - 1 Then
    $out &= $var[$i]
    Else
    $out &= $var[$i] & @CRLF
    EndIf
    Next
    Return $out
    EndFunc ;==>_Abbrev2Code

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

    Func _Code2Abbrev()
    Local $out = '', $count = _GUICtrlEdit_GetLineCount($Edit2), $line
    If @error Then Return SetError(1)
    For $i = 0 To $count - 1
    $line = _GUICtrlEdit_GetLine($Edit2, $i)
    If StringInStr($line, @TAB, 1) Then $line = StringReplace($line, @TAB, '\t')
    If $i = $count - 1 Then
    $out &= $line
    Else
    $out &= $line & '\n'
    EndIf
    Next
    Return $out
    EndFunc ;==>_Code2Abbrev

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

    Func _WriteNewAbbrev()
    If GUICtrlRead($Edit2) = '' Then Return
    Local $abbr = _Code2Abbrev()
    If $abbr = $sAbbrev Then Return
    Local $fh = FileOpen($MyAbbrevPath, 1)
    FileWriteLine($fh, $txt & '=' & $abbr)
    FileClose($fh)
    $aAbbrev[0][0] += 1
    ReDim $aAbbrev[$aAbbrev[0][0] +1][2]
    $aAbbrevFile[0] += 1
    ReDim $aAbbrevFile[$aAbbrevFile[0] +1]
    $aAbbrev[$aAbbrev[0][0]][0] = $txt
    $aAbbrev[$aAbbrev[0][0]][1] = $abbr
    $aAbbrevFile[$aAbbrevFile[0]] = $txt & '=' & $abbr
    For $i = $aAbbrevFile[0] To 1 Step -1
    If $aAbbrevFile[$i] = $Last_STR Then ExitLoop
    Next
    _ArraySwap($aAbbrevFile[$aAbbrevFile[0]], $aAbbrevFile[$i])
    FileMove($Abbr_Path, $Abbr_Path & '.BAK', 1)
    _FileWriteFromArray($Abbr_Path, $aAbbrevFile, 1)
    _KeyWordSet($txt)
    $fh = FileOpen($MyKeyWordPath, 1)
    FileWrite($fh, $txt & @CRLF)
    FileClose($fh)
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView1))
    GUICtrlSetData($Edit2, '')
    _LV_Fill()
    Local $idx = _LV_FindInSubItem($ListView1, $txt, 0)
    GUICtrlSetState($ListView1, $GUI_FOCUS)
    _GUICtrlListView_EnsureVisible($ListView1, $idx)
    _GUICtrlListView_SetItemSelected($ListView1, $idx)
    Reload_Config()
    EndFunc ;==>_WriteNewAbbrev

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

    Func _WriteEditedAbbrev()
    If GUICtrlRead($Edit2) = '' Then Return
    Local $abbr = _Code2Abbrev()
    If $abbr = $sAbbrev Then Return
    Local $index = _ArraySearch($aAbbrev, $txt)
    $aAbbrev[$index][1] = $abbr
    For $i = $aAbbrevFile[$aAbbrevFile[0]] To 1 Step -1
    If StringLeft($aAbbrevFile[$i], StringLen($txt +1)) = $txt & '=' Then
    $aAbbrevFile[$i] = $txt & '=' & $abbr
    ExitLoop
    EndIf
    Next
    FileMove($Abbr_Path, $Abbr_Path & '.BAK', 1)
    _FileWriteFromArray($Abbr_Path, $aAbbrevFile, 1)
    Local $fh = FileOpen($MyAbbrevPath, 0)
    Local $content = FileRead($fh)
    FileClose($fh)
    If Not StringRegExp($content, '\r\n' & $txt & '=') Then
    $fh = FileOpen($MyAbbrevPath, 1)
    FileWriteLine($fh, $txt & '=' & $abbr)
    FileClose($fh)
    Else
    $fh = FileOpen($MyAbbrevPath, 0)
    Local $line, $row = 2
    While 1
    $line = FileReadLine($fh, $row)
    If @error = -1 Then ExitLoop
    $split_f = _SplitOnce($line)
    If $txt = $split_f[0] Then ExitLoop
    $row += 1
    WEnd
    FileClose($fh)
    _FileWriteToLine($MyAbbrevPath, $row, $txt & '=' & $abbr, 1)
    EndIf
    Local $line = _GetLine() - 1
    Local $idx = _LV_FindInSubItem($ListView1, $txt, 0)
    $aAbbrevFile[$line] = $txt & '=' & $abbr
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView1))
    GUICtrlSetData($Edit2, '')
    _LV_Fill()
    _FileWriteToLine($Abbr_Path, $line, $txt & '=' & $abbr, 1)
    GUICtrlSetState($ListView1, $GUI_FOCUS)
    _GUICtrlListView_EnsureVisible($ListView1, $idx)
    _GUICtrlListView_SetItemSelected($ListView1, $idx)
    Reload_Config()
    EndFunc ;==>_WriteEditedAbbrev

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

    Func _Delete()
    $txt = GUICtrlRead($iSearch)
    If MsgBox(262180, 'Achtung', 'Soll die Abkürzung ' & @LF & '>> ' & $txt & ' <<' & @LF & ' wirklich gelöscht werden?') = 7 Then Return
    Local $idx = _GetLine() - 1
    $aAbbrevFile[$idx] = ''
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView1))
    GUICtrlSetData($iSearch, '')
    Local $index = _ArraySearch($aAbbrev, $txt, 1)
    _ArrayDelete($aAbbrev, $index)
    _LV_Fill()
    _FileWriteToLine($Abbr_Path, $idx, '', 1)
    $fh = FileOpen($MyAbbrevPath, 0)
    Local $line, $row = 2
    While 1
    $line = FileReadLine($fh, $row)
    If @error = -1 Then ExitLoop
    $split_f = _SplitOnce($line)
    If @error Then ContinueLoop
    If $txt = $split_f[0] Then ExitLoop
    $row += 1
    WEnd
    FileClose($fh)
    _FileWriteToLine($MyAbbrevPath, $row, '', 1)
    Local $keys = FileRead($KeyWordPath)
    $keys = StringReplace($keys, $txt & ' ', '', 1, 1)
    Local $fh = FileOpen($KeyWordPath, 2)
    FileWrite($fh, $keys)
    FileClose($fh)
    $keys = FileRead($MyKeyWordPath)
    $keys = StringReplace($keys, $txt & @CRLF, '', 1, 1)
    $fh = FileOpen($MyKeyWordPath, 2)
    FileWrite($fh, $keys)
    FileClose($fh)
    Reload_Config()
    EndFunc ;==>_Delete

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

    Func _GetLine()
    Local $var
    For $i = 1 To UBound($aAbbrevFile) - 1
    $var = _SplitOnce($aAbbrevFile[$i], '=')
    If @error Then ContinueLoop
    If $var[0] = $txt Then Return $i + 1
    Next
    EndFunc ;==>_GetLine

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

    Func _KeyWordSet($KEYWORD, $CHECK = 0)
    Local $txtZeile, $len
    If $CHECK Then
    Local $fh = FileOpen($KeyWordPath, 0)
    Local $read = FileRead($fh)
    FileClose($fh)
    If StringInStr($read, $KEYWORD & ' ', 1) Then Return
    EndIf
    $zeile = _FileCountLines($KeyWordPath)
    $txtZeile = FileReadLine($KeyWordPath, $zeile)
    $len = StringLen($txtZeile) + 4
    If $len + StringLen($KEYWORD) > 100 Then
    _FileWriteToLine($KeyWordPath, $zeile, $txtZeile & "\" & @CRLF, 1)
    _FileWriteToLine($KeyWordPath, $zeile + 1, @TAB & $KEYWORD & " ", 1)
    Else
    _FileWriteToLine($KeyWordPath, $zeile, $txtZeile & $KEYWORD & " ", 1)
    EndIf
    EndFunc ;==>_KeyWordSet

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

    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Switch $wParam
    Case $ListView1
    Local $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return $GUI_RUNDEFMSG
    If DllStructGetData($tagNMHDR, 3) = $NM_CLICK Then ListView1Click()
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_COMMAND

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

    ; Thanks to Jos for following functions:
    Func Reload_Config()
    ;Send SciTE Director my GUI handle so it will report info back from SciTE
    SendSciTE_Command("reloadproperties:")
    EndFunc ;==>Reload_Config
    ; Send command to SciTE
    Func SendSciTE_Command($sCmd, $Wait_For_Return_Info = 0)
    Local $WM_COPYDATA = 74
    Local $WM_GETTEXT = 0x000D
    Local $WM_GETTEXTLENGTH = 0x000E224
    Local Const $SCI_GETLINE = 2153
    Local $Scite_hwnd = WinGetHandle("DirectorExtension") ; Get SciTE DIrector Handle
    Local $My_Hwnd = GUICreate("AutoIt3-SciTE interface") ; Create GUI to receive SciTE info
    Local $My_Dec_Hwnd = Dec(StringTrimLeft($My_Hwnd, 2)) ; Convert my Gui Handle to decimal
    $sCmd = ":" & $My_Dec_Hwnd & ":" & $sCmd ; Add dec my gui handle to commandline to tell SciTE where to send the return info
    ;~ ConsoleWrite('SciTE Command --> ' & $sCmd & @LF)
    Local $CmdStruct = DllStructCreate('Char[' & StringLen($sCmd) + 1 & ']')
    DllStructSetData($CmdStruct, 1, $sCmd)
    Local $COPYDATA = DllStructCreate('Ptr;DWord;Ptr')
    DllStructSetData($COPYDATA, 1, 1)
    DllStructSetData($COPYDATA, 2, StringLen($sCmd) + 1)
    DllStructSetData($COPYDATA, 3, DllStructGetPtr($CmdStruct))
    DllCall('User32.dll', 'None', 'SendMessage', 'HWnd', $Scite_hwnd, _
    'Int', $WM_COPYDATA, 'HWnd', $My_Hwnd, _
    'Ptr', DllStructGetPtr($COPYDATA))
    GUIDelete($My_Hwnd)
    EndFunc ;==>SendSciTE_Command

    [/autoit]


    DL bisher: 278

  • Hallo BugFix.

    Super Sache !!!!

    Da wird einen doch sehr mit geholfen.

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo BugFix.

    Cool,das muß ich hier mal sagen.

    Einen Vorschlag noch, bzw. mir ist aufgefallen, das er die neuen Einträge nicht sortiert.

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Einen Vorschlag noch, bzw. mir ist aufgefallen, das er die neuen Einträge nicht sortiert.

    Hi Lina,
    die Einträge sind auch so nicht sortiert, sondern gruppiert nach Themen. Insofern war mir das nicht so wichtig. Ich stelle die Einträge in der Reihenfolge dar, wie sie in der Datei enthalten sind.
    Neue Einträge werden in jedem Fall ans Ende geschrieben, gewissermaßen hast du dann eine zusammenhängende Gruppe selbst erstellter Abkürzungen.
    Editierte Abkürzungen werden in jedem Fall an dieselbe Position zurückgeschrieben.

    NB: Neu erstellte Kürzel benötigen einen erneuten Start von SciTE, damit sie initialisiert werden können. ;)

  • BugFix .

    Das ist doch okay. Habe es auch erst zu spät gesehen. Aber die Umsetzung, einfach genial.


    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Super Script ! :)

    musste aber noch 4 Includes einfügen damit es ging:

    [autoit]

    #include <ButtonConstants.au3>
    #include <ListviewConstants.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>

    [/autoit]

    Danke für die Hilfe

  • ich bekomme immer diese Fehlermeldung ^^

    If @AutoItUnicode Then
    If ^ ERROR

    liegt das an meinen Include? falls ja an welchen ..^^

  • das ist aba innerhalb des Includes

    "Programme\AutoIt3\Include\GUIListView.au3 (6244) : ==> Unknown macro.: "

    kann ich das trozdem ohne Probs löschn?

    BugFix sry das ich das hier in dem Thread frage ^^

  • oha danke hatte nur die 3.2.12 Version drauf xDDD

    danke und echt gailes Script BugFix =)

    und wa sich dich mal Fratge wollte wie kommt es das du Immernoch mit AutuIt abeitest das muss doch mal lw werden oda?^^

    • Offizieller Beitrag

    und wa sich dich mal Fratge wollte wie kommt es das du Immernoch mit AutuIt abeitest das muss doch mal lw werden oda?


    Warum sollte es langweilig werden? Der Vorteil von AutoIt gegenüber 'echten' Programmiersprachen ist zweifellos die Tatsache, dass man mit wenig, leicht verständlichem Code zum Ziel kommt. Die Ausführung dauert zwar länger aber bei der Mehrzahl der Anwendungen spielt das keine Rolle. Und es finden sich immer wieder Aufgaben die man lösen möchte. Den Satz: 'Ich weiß nicht, was ich programmieren soll.' wird man von mir sicher niemals hören. :D

  • hehe klingt auch i-wie logisch xDD

    wie verwende ich die Abkürzungen eig in Scite? (Stell mich bestimmt grade ziemlich doof an ^^)

  • ah wow jetzt mekre ich erst wie gail das script wirklich ist also riesen Respekt nochma =)