Abbrevs Verwaltung Bugfix

  • Hallo,

    mal eine Frage zur Abbrevs Verwaltung von Bugfux.
    Ich nehme mal an, daß man damit auch kpl. Funktionen abspeichern kann.

    Das habe ich versucht, aber es ging leider nicht!

    • Ich starte die Abbrevs.au3
    • Ich trage die Abkürzung ein und klicke auf hinzufügen
    • Ich füge meinen kpl. Code ein

    Wenn ich nun in der Abbrevs.au3 suche, dann finde ich auch den Code.

    Was ich nicht verstehe:

    Zitat

    Starte ich Scite, schreibe fun und drücke dann die Leertaste, dann erscheint der Code!
    Schreibe ich in Scite aber meine CodeAbkürzung und drücke die Leertase, dann passiert nichts!

    Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (27. November 2010 um 14:21)

    • Offizieller Beitrag

    Ich kann diesen Fehler absolut nicht reproduzieren. Das von dir neu erstellte Keywort wird in folgendem Pfad gespeichert:

    Code
    $KeyWordPath = StringReplace($ScitePath, "SciTE.exe", "properties\au3.keywords.abbreviations.properties")

    Auf diese Datei greift SciTE zu.
    Da bei Updates von SciTE diese Datei überschrieben wird, wird eine Sicherung in folgendem Pfad hinterlegt:

    Code
    $MyKeyWordPath = @UserProfileDir & '\au3.keywords.my'

    Somit kannst du über das Menü "Wiederherstellung" deine Abbrevs wiederherstellen.
    Beim Schließen des Fensters mit dem neuen Code wird das Abbrev eingetragen und SciTE führt sofort ein Reload durch (siehst du in der Console: "SciTE Command --> :45024266:reloadproperties:"). Dadurch steht das Abbrev sofort zur Verfügung.

    Einzige mögliche Erklärung für mich: Du hast für den $KeyWordPath keine Schreibrechte.

  • guten Morgen Bugfix,

    konnte mich leider am Wochenende nicht mehr melden.
    Hm.. ich kann das ganze leider auch nicht verstehen.
    in Deinem Programm ist der Code drin und wird auch in deinem Script gefunden.

    Zitat

    $MyKeyWordPath = @UserProfileDir & '\au3.keywords.my'

    Diese Datei habe ich gerüft, die hat aber Vollzugriff und alle Schreibrechte.
    Lesen, Schreiben, Vollzugriff.... überall gesetzt!

    Mein Scite ist in Englisch

    Zitat

    Somit kannst du über das Menü "Wiederherstellung" deine Abbrevs wiederherstellen.

    ...SciTE Command --> :45024266:reloadproperties, das habe ich leider nicht gefunden


    Grüße
    Ilse ;)

    • Offizieller Beitrag

    ...SciTE Command --> :45024266:reloadproperties, das habe ich leider nicht gefunden


    Wenn du die .au3 Version des Skriptes ausführst, erhältst du nach dem Erstellen einer neuen Abkürzung (also nach dem Schließen des Fensters mit dem zugehörigen Code) eine Ausgabe in die Console mit diesem Hinweis. Bedeutet: SciTE hat die .properies neu geladen (ohne Neustart von SciTE) und somit steht die neue Abkürzung sofort zur Verfügung.

    • Offizieller Beitrag

    hast du mal in die abbrev.properties geschaut? (SciTE - Optionen - Abkürzungsdatei Öffnen)
    Sollte am Dateiende so aussehen:

  • meine abbrev.properties sieht mit meinen testeinträgen so aus:

    [autoit]


    wwc=WinWaitClose(|)
    wwna=WinWaitNotActive(|)

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

    hov=$Farbe = true\nAdlibRegister("_Hover_Label",5)\n\nFunc _Hover_Label()\n $pos = GUIGetCursorInfo()\n\n If $pos[4] = $label1 And $Farbe = false Then\n GUICtrlSetBkColor($label1, 0xFF0000)\n $Farbe = True\n ElseIf $pos[4] <> $label1 And $Farbe = True then\n GUICtrlSetBkColor($label1, -2)\n $Farbe = False\n EndIf\nEndFunc
    hov1=#include <StaticConstants.au3>\n#include <StructureConstants.au3>\n#include <WindowsConstants.au3>\n#include <File.au3>
    #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#

    [/autoit]

    hov und hov1 sind Versuche mit Code von mir.

    • Offizieller Beitrag

    OK, der Code ist also eingetragen. Dann schau bitte nach ob auch die Keyworddatei vervollständigt wurde.
    Pfad: "C:\Programme\AutoIt3\SciTE\Properties\au3.keywords.abbreviations.properties"
    Sollte so aussehen (blau markiert: eigene Abbrevs):

    Zitat


    ....
    tci tcm tgm tid tigh tigs tigt tisoe tiss tist tsc tsi tsoe tspi tss tstt tt ub udpb udpcs \
    udpo udpr udpsd udpsu wat wa wc we wf wgcp wgcl wgcs wgh wgpo wgpr wgs wgte wgti wk wl \
    wmsi wma wmau wm wsot wss wst wstr ww wwa wwc wwna gcclv gcclvi frta ard lc header _gclvg \
    _gclvs getid

    • Offizieller Beitrag

    Die blau markierten waren eigene, bei dir sollte dann also "hov" und deine weiteren Abbrevs erscheinen.
    Die Abbrevs werden also nicht in diese Datei geschrieben. Verwendest du auch die letzte Version meines Programms? Ich kann mich schwach erinnern, dass ich da noch ein paar Bugs entfernt hatte. Ist im Edit des Threads aber vermerkt.
    In meinem Skript findest du (ziemlich am Ende) die Funktion _KeyWordSet(). Werte dadrin doch mal die Rückgabewerte der Schreibbefehle (_FileWriteToLine) aus. Ich denke, da liegt irgendwo der Hund begraben. Vielleicht wird bei dir einer der Pfade nicht gefunden?

  • Hallo Bugfix,

    ich habe mal deine Version eingefügt!
    Ob es die letzte ist, weiß ich nicht!

    Spoiler anzeigen
    [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 $Start_STR = '#; -- Gui Variables --', $start = False, $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 $aAbbrev
    _FileReadToArray($Abbr_Path, $aAbbrev)

    [/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')
    $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, 0xFF4400)
    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 _Search()
    $txt = GUICtrlRead($iSearch)
    If $txt = '' Then Return
    Local $indx = _LV_FindInSubItem($ListView1, $txt, 0)
    If $indx = -1 Then
    MsgBox(0, 'Suche Abbrev', 'Abbrev: "' & $txt & '" existiert nicht.')
    Else
    _GUICtrlListView_EnsureVisible($ListView1, $indx)
    _GUICtrlListView_SetItemSelected($ListView1, $indx)
    EndIf
    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])
    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])
    GUICtrlSetData($Label1, $aLabel[1])
    GUICtrlSetData($Edit2, _Abbrev2Code(_GUICtrlListView_GetItemText($ListView1, _LV_FindInSubItem($ListView1, $txt, 0), 1)))
    GUISetState(@SW_SHOW, $Form3)
    EndFunc ;==>_Edit

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

    Func _Restore()
    Local $aMyAbbrev, $split_a, $split_f
    _FileReadToArray($MyAbbrevPath, $aMyAbbrev)
    For $i = 2 To UBound($aMyAbbrev) - 1
    $start = False
    For $j = 1 To UBound($aAbbrev) - 1
    If $aAbbrev[$j] = $Start_STR Then $start = True
    If (Not $start) Or (StringLeft($aAbbrev[$j], 1) = '#') Or ($aAbbrev[$j] = '') Then ContinueLoop
    $split_a = _SplitOnce($aAbbrev[$j])
    If @error Then ContinueLoop
    $split_f = _SplitOnce($aMyAbbrev[$i])
    If @error Then ContinueLoop
    If $split_a[0] = $split_f[0] Then
    ConsoleWrite($split_f[0] & @CRLF)
    $aAbbrev[$j] = $split_f[0] & '=' & $split_f[1]
    WinSetTitle($Form1, '', 'Restore Abbrev: ' & $split_f[0])
    $aMyAbbrev[$i] = -1
    ExitLoop
    EndIf
    Next
    Next
    For $i = 2 To UBound($aMyAbbrev) - 1
    If $aMyAbbrev[$i] = -1 Then ContinueLoop
    $split_f = _SplitOnce($aMyAbbrev[$i])
    WinSetTitle($Form1, '', 'Restore Abbrev: ' & $split_f[0])
    Sleep(20)
    ReDim $aAbbrev[UBound($aAbbrev) + 1]
    $aAbbrev[UBound($aAbbrev) - 1] = $aMyAbbrev[$i]
    For $j = UBound($aAbbrev) - 1 To 1 Step -1
    If $aAbbrev[$j] = $Last_STR Then ExitLoop
    Next
    _ArraySwap($aAbbrev[UBound($aAbbrev) - 1], $aAbbrev[$j])
    Next
    FileMove($Abbr_Path, $Abbr_Path & '.BAK', 1)
    _FileWriteFromArray($Abbr_Path, $aAbbrev, 1)
    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
    _FileReadToArray($Abbr_Path, $aAbbrev)
    WinSetTitle($Form1, '', 'Restore')
    MsgBox(64, 'Restore', 'Restore beendet.', 1.5)
    WinSetTitle($Form1, '', "Abkürzungen verwalten [" & $Abbr_Path & ']')
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView1))
    _LV_Fill()
    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)))
    GUISetState(@SW_SHOW, $Form2)
    EndFunc ;==>ListView1Click

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

    Func _LV_Fill()
    GUISetState(@SW_LOCK, $Form1)
    Local $k = 0
    $start = False
    For $i = 1 To UBound($aAbbrev) - 1
    If $aAbbrev[$i] = $Start_STR Then $start = True
    If (Not $start) Or (StringLeft($aAbbrev[$i], 1) = '#') Or ($aAbbrev[$i] = '') Then ContinueLoop
    $var = _SplitOnce($aAbbrev[$i])
    If @error Then ContinueLoop
    GUICtrlCreateListViewItem('|', $ListView1)
    GUICtrlSetBkColor(-1, 0xFFF278)
    _GUICtrlListView_SetItemText($ListView1, $k, $var[0], 0)
    _GUICtrlListView_SetItemText($ListView1, $k, $var[1], 1)
    $k += 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()
    Local $fh = FileOpen($MyAbbrevPath, 1)
    FileWriteLine($fh, $txt & '=' & $abbr)
    FileClose($fh)
    ReDim $aAbbrev[UBound($aAbbrev) + 1]
    $aAbbrev[UBound($aAbbrev) - 1] = $txt & '=' & $abbr
    For $i = UBound($aAbbrev) - 1 To 1 Step -1
    If $aAbbrev[$i] = $Last_STR Then ExitLoop
    Next
    _ArraySwap($aAbbrev[UBound($aAbbrev) - 1], $aAbbrev[$i])
    FileMove($Abbr_Path, $Abbr_Path & '.BAK', 1)
    _FileWriteFromArray($Abbr_Path, $aAbbrev, 1)
    _KeyWordSet($txt)
    $fh = FileOpen($MyKeyWordPath, 1)
    FileWrite($fh, $txt & @CRLF)
    FileClose($fh)
    _FileReadToArray($Abbr_Path, $aAbbrev)
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView1))
    GUICtrlSetData($Edit2, '')
    $start = False
    $k = 0
    _LV_Fill()
    Local $idx = _LV_FindInSubItem($ListView1, $txt, 0)
    _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()
    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)
    $aAbbrev[$line] = $txt & '=' & $abbr
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView1))
    GUICtrlSetData($Edit2, '')
    $start = False
    $k = 0
    _LV_Fill()
    _FileWriteToLine($Abbr_Path, $line, $txt & '=' & $abbr, 1)
    _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
    $aAbbrev[$idx] = ''
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView1))
    GUICtrlSetData($iSearch, '')
    $start = False
    $k = 0
    _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($aAbbrev) - 1
    $var = _SplitOnce($aAbbrev[$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]

    Edit BugFix: Spoiler gesetzt

    Einmal editiert, zuletzt von BugFix (29. November 2010 um 12:01)

    • Offizieller Beitrag

    Das ist die aktuelle Version.

    Ersetze mal _KeyWordSet() mit dieser Funktion zur Fehlerausgabe. Der Fehlerwert sagt dir dann, warum nicht in die Datei geschrieben wird.

    Spoiler anzeigen
    [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)
    If @error Then Return MsgBox(0, 'Fehler', 'Schreiben in Datei' & @CRLF & $KeyWordPath & @CRLF & 'fehlgeschlagen.' & @CRLF & 'Fehler-Nr.: ' & @error)
    _FileWriteToLine($KeyWordPath, $zeile + 1, @TAB & $KEYWORD & " ", 1)
    Else
    _FileWriteToLine($KeyWordPath, $zeile, $txtZeile & $KEYWORD & " ", 1)
    If @error Then Return MsgBox(0, 'Fehler', 'Schreiben in Datei' & @CRLF & $KeyWordPath & @CRLF & 'fehlgeschlagen.' & @CRLF & 'Fehler-Nr.: ' & @error)
    EndIf
    EndFunc ;==>_KeyWordSet

    [/autoit]
  • ...habe ich gemacht!
    Fehlermeldung ist weg, ...in der Command-Zeile findet kein Reload statt
    und nach Eingabe in Scite passiert immer noch nichts!

    fun leertaste funktioniert!

    Ich habe mir auch nochmal die keyword.abbreviations.properties angesehen
    da ist nun was drin

    wwna test test1 test3

    aber nur meine Abkürzungen!
    Der Code den ich bei der abbrevs.au3 eingefügt habe erscheint nicht.

    • Offizieller Beitrag

    Du wirfst glaub ich etwas durcheinander.
    Es sind zwei verschiedene Dateien (+ Sicherungsdateien) in die geschrieben wird.
    - einmal die Abkürzung mit Code in der Form: "Abbrev=Hier steht der Code" in der Datei: @UserProfileDir & '\abbrev.properties'
    - und die Abkürzung selbst wird in: $ScitePath &"\properties\keyword.abbreviations.properties" eingetragen - dort stehen nur die Abkürzungen

    Säuber mal die Dateien von Hand, also die Einträge von dir rauslöschen. Dann verwende noch mal das Tool. Da vorhin der Code eingetragen wurde und jetzt auch die Abkürzungen erscheinen, gibt es keinen Grund, dass es nicht funktioniert.

  • ...da ist irgendwo ein Wurm drin!

    au3abbrev,properties
    sieht am Ende so aus:

    [autoit]


    wwa=WinWaitActive(|)
    wwc=WinWaitClose(|)
    wwna=WinWaitNotActive(|)

    [/autoit]

    Ich habe dann die Abbrevs.au3 geöffnet
    und die letzten Einträge gelöscht!
    Hier steht als letzter Eintrag wwna

    So, ich öffne meine keyword.abbreviation.properties
    sieht nun am Ende aber so aus:

    [autoit]


    wstr ww wwa wwc wwna meinTest

    [/autoit]

    das kann ich nicht löschen.
    Wenn ich die abbrevs.au3 starte (Admin Rechte...ok)
    dann erscheint mein test nicht am Ende!

    Ich habe die Datei nun von Hand
    mit einem anderen Editor PS2 am Ende gelöscht!
    Also meintest entfernt!

    Und jetzt passiert etwas seltsames:
    Öffne ich diese Datei keyword.abbreviation.properties
    mit PS2 dann ist die Datei OK!

    Öffne ich die gleiche Datei mit Scite
    keyword.abbreviation.properties
    dann steht am Ende wieder Meintest
    Starte ich wieder Abbrevs.au3 dort ist kein "MeinTest" zu sehen!
    In PS2 auch nicht!

    Die Datei läßt sich in Scite nicht bearbeiten!
    autoit.de/wcf/attachment/11910/

    Ilse ?(

    • Offizieller Beitrag

    OK, dann machen wir einfach mal richtig sauber und entfernen alle betreffenden Dateien und installieren sie neu.
    Laß dir einfach mal alle Pfade ausgeben, damit wir auch die korrekten Dateien verwenden:

    [autoit]

    $ScitePath = RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\SciTE.exe", "")
    $KeyWordPath = StringReplace($ScitePath, "SciTE.exe", "properties\au3.keywords.abbreviations.properties")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $KeyWordPath = ' & $KeyWordPath & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $Abbr_Path = @UserProfileDir & '\abbrev.properties'
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Abbr_Path = ' & $Abbr_Path & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ; === Sicherungsdateien zur Wiederherstellung
    $MyKeyWordPath = @UserProfileDir & '\au3.keywords.my'
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $MyKeyWordPath = ' & $MyKeyWordPath & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $MyAbbrevPath = @UserProfileDir & '\abbrev.properties.my'
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $MyAbbrevPath = ' & $MyAbbrevPath & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit]


    Die Originaldateien ( $KeyWordPath, $Abbr_Path) ersetzt du mit den angehängten Dateien.
    Die anderen beiden löschst du - sie werden vom Programm neu erstellt.

  • Hallo Bugfix,

    heute ist wirklich nicht unser Tag!

    Folgendes passiert:
    Ich habe die Dateien ersetzt, war alles soweit ok!

    • Ich starte abbrevs.au3 und füge TEST mit code hinzu

    Komisch ist, TEST ist im Programm nicht mehr zu sehen!
    Also unten in der letzten Zeile!
    Es wird auch nichts aktualisiert!

    Öffne ich nun die keyword.abbreviation.properties
    also die Datei die ich vorher kopiert habe, dann steht jetzt TEST drin!

    Muß abbrevs.au3 vielleicht in einem bestimmten Ordner liegen?

  • Hallo Bugfix,

    ich hab's zum laufen gekriegt!
    Habe alles nochmal neu gemacht.
    Auch Scite kpl. neu installiert, alle Dateien erneuert...
    Bin jetzt wirklich reif für die Insel.

    Wenn ich ehrlich bin, weiß ich zwar immer noch nicht wieso
    das jetzt klappt (???xxx)

    Was mir aber aufgefallen ist:
    Manche Abkürzungen funktionieren
    und andere nicht!
    z.B.
    Msg funktioniert nicht!
    Msg2 funktioniert!
    obwohl Msg nicht vorhanden ist.

    egal... es läuft!


    Viele Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (29. November 2010 um 18:06)