Jump to content

GrepWinEditor


ioa747
 Share

Recommended Posts

GrepWin CmdLine Editor to SciTE

for those who don't know !
grepWin  is a powerful and fast search tool using regular expressions
I use it Regularly, so I said to order in AutoIt services  :)

230530-031403-103_grepWin_portable_GUE3d

more info:
https://github.com/stefankueng/grepWin

 

Script does Two Jobs

case 1 : Act as editor for grepWin to start SciTE at a specific line

in this case for it to work we have to go to the grepWin settings and in the section Editor in  Command line to start an editor at a specific line:
and give the follow  "PathToAutoIt3.exe" "PathToThisScript.au3" |%path%|%line%
where
"PathToAutoIt3.exe"      = the path to AutoIt3.exe
"PathToThisScript.au3"  = the path of this script
|%path%|%line%            = as it is

main_setting: "C:\Program Files (x86)\AutoIt3\AutoIt3.exe" "D:\i\Pro\.AutoIT\SciTE_PlusBar\SciTE\CMD\GrepWinEditor.au3" |%path%|%line%

 

and check the Only one instance  CheckBox

 

case 2 : Get the selected txt from SciTE and set as /searchfor: parameter to grepWin

a dialog window opens to choose position / setting   to  search for

230530-133427-472_AutoIt3_0Vsus.png
which is dynamically updated from GrepWinEditor.ini

The searchini , an ini file which contains all the values usually passed on the command line  -   /searchini:"path/to/inifile"
 [@ScriptDir], [1 Up], [2 Up] section do not change them, they update dynamically every time
 [@ScriptDir] = @ScriptDir
 [1 Up] = @ScriptDir & "\..\"
 [2 Up] = @ScriptDir & "\..\..\"
 [Default] = The Default setting if no parameter - do not change the Name
the rest act as examples and they can change

If you want for example after choose the  @ScriptDir button
to the search started immediately, without  having to click the search button first

put in the GrepWinEditor.ini in section  [@ScriptDir] the entry
execute=

Command line parameters for grepWin

Tested with grepWin-2.0.13_portable -x86
 

Spoiler

ℹ️ Adding personal utilities to the SciTE <Tools> menu

 you can add an item to run this utility to the SciTE <Tools> menu yourself very easily.
 open the au3.properties file and scroll down to the long series of "command" lines that begin about Line 58 (#x 00 Beta RUN) and go down to the last one
 - in v3.3.8.1 it is Line 267 (#~ # 34 Generate UDF header).
 You need to find the highest value used so far - 34 in this case - as your own tools need to use command numbers greater than those already allocated

 Add to your SciTEUser.properties
 change the "D:\i\Pro\.AutoIT\SciTE_PlusBar\SciTE\CMD\GrepWinEditor.au3" to yours  <-

#------------------------------------------------------------------------------
# 43 GrepWinEditor
command.43.$(au3)="$(SciteDefaultHome)\..\AutoIt3.exe" "D:\i\Pro\.AutoIT\SciTE_PlusBar\SciTE\CMD\GrepWinEditor.au3"
command.name.43.$(au3)=GrepWinEditor
command.shortcut.43.$(au3)=Ctrl+Alt+G
command.subsystem.43.$(au3)=2
command.save.before.43.$(au3)=0
command.quiet.43.$(au3)=1
#------------------------------------------------------------------------------

 

; https://www.autoitscript.com/forum/topic/210301-grepwineditor/
;------------------------------------------------------------------------------
; Title...........: GrepWinEditor.au3
; Description.....: GrepWin CmdLine Editor to SciTE
;------------------------------------------------------------------------------
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\ICO\GrepWinEditor.ico
#AutoIt3Wrapper_Res_Comment=GrepWin_CmdLine_Editor_Setting: "PathToAutoIt3.exe" "PathToThisScript.au3" |%path%|%line%
#AutoIt3Wrapper_Res_Description=GrepWin CmdLine Editor to SciTE
#AutoIt3Wrapper_Res_Fileversion=0.0.0.9
#AutoIt3Wrapper_Res_ProductName=GrepWinEditor.au3
#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <FileConstants.au3>
#include <EditConstants.au3>
#include <MsgBoxConstants.au3>
#include <ButtonConstants.au3>
#include <SendMessage.au3>
#include <File.au3>
#include <Array.au3>

Global $sGrepWinExe = 'D:\i\Pro\grepWin-x86\grepWin_portable.exe' ;ℹ️ Add your path to grepWin <-
Global $iShowGuiCtrlTip = 1                                       ;ℹ️ Set to 0 to hide the GuiCtrlTip <-
Global $MyIni = StringTrimRight(@ScriptFullPath, 4) & ".ini"

Global $hSciTE_hWnd = WinGetHandle("[CLASS:SciTEWindow]", "")
Global $hScite_Editor_hWnd = ControlGetHandle($hSciTE_hWnd, '', '[CLASS:Scintilla; INSTANCE:1]')

Global $iParams, $hGrepWin_hWnd
$iParams = $CmdLine[0]
If Not $iParams Then
    Global $SciTE_CurrentFile, $SciTE_SelectetTxt
    $SciTE_SelectetTxt = _SciTE_GetSelection()
    ConsoleWrite("- $SciTE_CurrentFile=" & $SciTE_CurrentFile & @CRLF)
    ConsoleWrite("- $SciTE_SelectetTxt=" & $SciTE_SelectetTxt & @CRLF)

    _GrepWinGui($SciTE_SelectetTxt)

Else
    $iParams = $CmdLine
;~  _TestGUI($CmdLineRaw)
    _OpenWithSciTE()
EndIf

Exit

;----------------------------------------------------------------------------------------
Func _SciTE_GetSelection() ;Return the Current SciTE Selection
    Local $ClipBack, $sClip
    $SciTE_CurrentFile = ""
    $ClipBack = ClipGet() ; backup clip data

    ;get first the $SciTE_CurrentFile
    ClipPut("<Empty>") ; <Empty>

    WinMenuSelectItem($hSciTE_hWnd, "", "&File", "Copy Pat&h")
    Sleep(50)
    Local $ScriptFullPath = ClipGet()
    Sleep(50)
    ConsoleWrite("--- $ScriptFullPath=" & $ScriptFullPath & @CRLF)
    If FileExists($ScriptFullPath) Then
        $SciTE_CurrentFile = $ScriptFullPath
    EndIf


    ; and then get the $SciTE_SelectetTxt
    ClipPut("<Empty>") ; <Empty>
    _SendMessage($hScite_Editor_hWnd, $WM_COPY)
    Sleep(100) ; * <-
    $sClip = ClipGet()
    ClipPut($ClipBack) ; Restore clip data
    If $sClip = "<Empty>" Then
        Return SetError(1, 0, "")
    Else
        Return $sClip
    EndIf
EndFunc   ;==>_SciTE_GetSelection
;----------------------------------------------------------------------------------------
Func _OpenWithSciTE() ;$CmdLineRaw order and send it to SciTE
    ;   ℹ️ important information
    ;   in GrepWin settings in 'Command line to start an editor at a specific line:' give the follow string
    ;   "PathToAutoIt3.exe" "PathToThisScript.au3" |%path%|%line%
    ;   main:"C:\Program Files (x86)\AutoIt3\AutoIt3.exe" "D:\i\Pro\.AutoIT\SciTE_PlusBar\SciTE\CMD\GrepWinEditor.au3" |%path%|%line%
    ;
    ;   then  '|%path%|%line%'  whill transformet to this. and send it to SciTE
    ;   "-open:D:\\i\\Pro\\.AutoIT\\_Test\\_CreateContextMenu\\TrayMsg.au3" -goto:27

    Local $aSpl = StringSplit($CmdLineRaw, "|")
    If $aSpl[0] = 3 Then
        Local $sCmdStr = '"-open:' & StringReplace($aSpl[2], "\", "\\") & '" -goto:' & $aSpl[3]
        ConsoleWrite("-- $sCmdStr=" & $sCmdStr & @CRLF)
        ShellExecute('C:\Program Files (x86)\AutoIt3\SciTE\SciTE.exe', $sCmdStr)
    EndIf
EndFunc   ;==>_OpenWithSciTE
;----------------------------------------------------------------------------------------
Func _TestGUI($Str) ; Test GUI
    Local $hGUI = GUICreate("Test GUI", 400, 151, 17, 552, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST, $WS_EX_NOACTIVATE))
    GUICtrlCreateInput($Str, 10, 10, 381, 91, $ES_MULTILINE)
    Local $Button_Ok = GUICtrlCreateButton("OK", 140, 110, 91, 31)
    GUISetState(@SW_SHOWNORMAL, $hGUI)
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $Button_Ok
                Exit
            Case Else
                ;
        EndSwitch
    WEnd
EndFunc   ;==>_TestGUI
;----------------------------------------------------------------------------------------
Func _GrepWinCall($CmdSectionName = Default, $sCmdSearchFor = Default, $sCmdRegex = Default, $sCmdSearchPath = Default)
    ;   ℹ️ important information
    ;   https://tools.stefankueng.com/grepWin_cmd.html
    ;   /searchpath:"path"  sets the path to search in
    ;   /searchfor:"regex or text"
    ;   /regex:[yes|no]
    ;   /searchini:"path/to/inifile"
    ;   /name:"sectionname" argument
    ;   main:
    ;    /name:"sectionname" /searchini:"path"
    ;   '/name:"Default" /searchini:"D:\i\Pro\.AutoIT\SciTE_PlusBar\SciTE\CMD\GrepWinEditor.ini"'

    ; chek if GrepWin is open and close it
    $hGrepWin_hWnd = WinGetHandle("[TITLE:grepWin; CLASS:#32770]")
    If WinExists($hGrepWin_hWnd) Then
        ConsoleWrite("! WinExists($hGrepWin_hWnd)" & @CRLF)
        ConsoleWrite("- WinClose=" & WinClose($hGrepWin_hWnd) & @CRLF)
        Sleep(100)
    EndIf

    Local $sCmdStr
    If $CmdSectionName = Default Then $CmdSectionName = "Default"
    If $sCmdSearchFor = Default Then $sCmdSearchFor = ""
    If $sCmdRegex = Default Then $sCmdRegex = ""
    If $sCmdSearchPath = Default Then $sCmdSearchPath = ""

    $sCmdStr = '/name:"' & $CmdSectionName & '"'
    $sCmdStr &= ' /searchini:"' & $MyIni & '"'

    If $sCmdSearchPath Then
        $sCmdStr &= ' /searchpath:"' & $sCmdSearchPath & '"'
        If Not $sCmdRegex Then $sCmdRegex = 'no'
    EndIf

    If $sCmdSearchFor Then
        $sCmdStr &= ' /searchfor:"' & $sCmdSearchFor & '"'
        If Not $sCmdRegex Then $sCmdRegex = 'no'
    EndIf

    If $sCmdRegex Then $sCmdStr &= ' /regex:"' & $sCmdRegex & '"'

    ConsoleWrite("- $sCmdStr=" & $sCmdStr & @CRLF)
    ShellExecute($sGrepWinExe, $sCmdStr)

EndFunc   ;==>_GrepWinCall
;----------------------------------------------------------------------------------------
Func _GrepWinGui($sCmdSearchFor = "", $sCmdRegex = "", $sCmdSearchPath = "") ; Ini Read
    Local $MyGui
    Local $iniFileExists = FileExists($MyIni)
    Local $index = 0
    Local $aArray[1][3]
    $aArray[0][0] = $index
    $aArray[0][1] = "Button_ID"
    $aArray[0][2] = "SearchPath"

    #Region ===( Checks if .ini not exists then make one. )===
    ; ℹ️ important information
    ; Make the searchini , an ini file which contains all the values usually passed on the command line
    ; [@ScriptDir], [1 Up], [2 Up] section do not change them, they update dynamically evry time
    ; [@ScriptDir] = @ScriptDir
    ; [1 Up] = @ScriptDir & "\..\"
    ; [2 Up] = @ScriptDir & "\..\..\"
    ; [Default] = The Default setting if no parameter - do not change the Name
    ; the rest act as examples and they can change
    ; https://tools.stefankueng.com/grepWin_cmd.html
    ; https://github.com/stefankueng/grepWin/releases/tag/2.0.13

    If Not $iniFileExists Then
        ;Open the file for writing (append to the end of a file) and store the handle to a variable.
        Local $hFileOpen = FileOpen($MyIni, $FO_APPEND + $FO_UTF8_NOBOM)
        If $hFileOpen = -1 Then
            MsgBox($MB_SYSTEMMODAL, "", "An error occurred while writing the " & @CRLF & $MyIni)
            Exit
        EndIf

        Local $spExamples = StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", $STR_NOCASESENSEBASIC, -1) - 1) & "\Examples"
        Local $spInclude = StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", $STR_NOCASESENSEBASIC, -1) - 1) & "\Include"

        Local $sTxt = ""
        $sTxt &= "[@ScriptDir]" & @CRLF
        $sTxt &= "searchpath=" & @CRLF
        $sTxt &= "regex=no" & @CRLF
        $sTxt &= "filemask=*.au3" & @CRLF
        $sTxt &= "direxcluderegex=BackUp" & @CRLF
        $sTxt &= "[1 Up]" & @CRLF
        $sTxt &= "searchpath=" & @CRLF
        $sTxt &= "regex=no" & @CRLF
        $sTxt &= "filemask=*.au3" & @CRLF
        $sTxt &= "direxcluderegex=BackUp" & @CRLF
        $sTxt &= "[2 Up]" & @CRLF
        $sTxt &= "searchpath=" & @CRLF
        $sTxt &= "regex=no" & @CRLF
        $sTxt &= "filemask=*.au3" & @CRLF
        $sTxt &= "direxcluderegex=BackUp" & @CRLF
        $sTxt &= "[Default]" & @CRLF
        $sTxt &= "searchpath=" & @MyDocumentsDir & @CRLF
        $sTxt &= "regex=no" & @CRLF
        $sTxt &= "filemask=*.au3" & @CRLF
        $sTxt &= "direxcluderegex=BackUp" & @CRLF
        $sTxt &= "[AutoIt3 -Examples]" & @CRLF
        $sTxt &= "searchpath=" & $spExamples & @CRLF
        $sTxt &= "regex=no" & @CRLF
        $sTxt &= "filemask=*.au3" & @CRLF
        $sTxt &= "direxcluderegex=BackUp" & @CRLF
        $sTxt &= "[AutoIt3 -Include]" & @CRLF
        $sTxt &= "searchpath=" & $spInclude & @CRLF
        $sTxt &= "regex=no" & @CRLF
        $sTxt &= "filemask=*.au3" & @CRLF
        $sTxt &= "direxcluderegex=BackUp" & @CRLF
        $sTxt &= "[All]" & @CRLF
        $sTxt &= "searchpath=" & @MyDocumentsDir & "|" & $spExamples & "|" & $spInclude & "|" & @CRLF
        $sTxt &= "regex=no" & @CRLF
        $sTxt &= "filemask=*.au3" & @CRLF
        $sTxt &= "direxcluderegex=BackUp" & @CRLF
        $sTxt &= "searchfor=search for All" & @CRLF

        ;Write data to the file using the handle returned by FileOpen.
        FileWrite($hFileOpen, $sTxt)

        ;Close the handle returned by FileOpen.
        FileClose($hFileOpen)
        Sleep(200)
        ShellExecute($MyIni)
    EndIf
    #EndRegion ===( Checks if .ini not exists then make one. )===

    Local $iPosition, $sScriptDir, $sUp1, $sUp2
    If $SciTE_CurrentFile Then
        $iPosition = StringInStr($SciTE_CurrentFile, "\", 0, -1)
        $sScriptDir = StringLeft($SciTE_CurrentFile, $iPosition - 1)
        ConsoleWrite("- $sScriptDir=" & $sScriptDir & @CRLF)
        $sUp1 = $sScriptDir
        $sUp2 = $sScriptDir
        $iPosition = StringInStr($SciTE_CurrentFile, "\", 0, -2)
        If $iPosition Then $sUp1 = StringLeft($SciTE_CurrentFile, $iPosition - 1)
        ConsoleWrite("- $sUp1=" & $sUp1 & @CRLF)
        $iPosition = StringInStr($SciTE_CurrentFile, "\", 0, -3)
        If $iPosition Then $sUp2 = StringLeft($SciTE_CurrentFile, $iPosition - 1)
        ConsoleWrite("- $sUp2=" & $sUp2 & @CRLF)
    EndIf

    ;prepare the @ScriptDir section
    IniWrite($MyIni, "@ScriptDir", "searchpath", $sScriptDir)
    IniWrite($MyIni, "1 Up", "searchpath", $sUp1)
    IniWrite($MyIni, "2 Up", "searchpath", $sUp2)
    Sleep(200) ;give some time to IniWrite

    ;Read the INI section names. This will return a 1 dimensional array.
    Local $aSections = IniReadSectionNames($MyIni)
    ;Check if an error occurred.
    If Not @error Then
        ;Enumerate through the array displaying the section names.
        For $i = 1 To $aSections[0]
            ReDim $aArray[UBound($aArray) + 1][3]
            $index += 1
            $aArray[0][0] = $index ; cnt
            $aArray[$index][0] = $aSections[$i]
            $aArray[$index][2] = IniRead($MyIni, $aSections[$i], "searchpath", "default") ;SearchPath
        Next
    EndIf

    Local $iElements, $iOffset
    $iElements = $aArray[0][0]

    If $iElements > 0 Then

        $iOffset = 25
        $MyGui = GUICreate("SearchFor: " & $sCmdSearchFor, 300, ($iElements * $iOffset) + 1, @DesktopWidth / 3, @DesktopHeight / 4, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))

        For $i = 1 To $iElements
            If $i = 1 Then
                $aArray[$i][1] = GUICtrlCreateButton($aArray[$i][0], 1, 0, 298, $iOffset, $BS_VCENTER)
                GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
                If $iShowGuiCtrlTip Then GUICtrlSetTip(-1, $aArray[$i][2])
            Else
                $aArray[$i][1] = GUICtrlCreateButton($aArray[$i][0], 1, ($i - 1) * $iOffset, 298, $iOffset, $BS_VCENTER)
                GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
                If $iShowGuiCtrlTip Then GUICtrlSetTip(-1, $aArray[$i][2])
            EndIf
        Next

        GUISetState(@SW_SHOW, $MyGui)
;~      _ArrayDisplay($aArray)

        Local $ID, $sSectionName
        While 1
            $ID = GUIGetMsg()
            Switch $ID
                Case $GUI_EVENT_CLOSE
                    Exit

                Case $aArray[1][1] To $aArray[$aArray[0][0]][1]
                    $sSectionName = $aArray[$ID - 2][0]
                    ConsoleWrite("- $sSectionName=" & $sSectionName & @CRLF)
                    _GrepWinCall($sSectionName, $sCmdSearchFor, $sCmdRegex, $sCmdSearchPath)
                    ExitLoop

                Case Else
                    ;
            EndSwitch
        WEnd
        GUIDelete($MyGui)
    EndIf

EndFunc   ;==>_GrepWinGui
;----------------------------------------------------------------------------------------

 

:) Please, leave your comments and experiences here.

thank you very much !

 

Edited by ioa747
UpDate to Version 0.0.0.9

I know that I know nothing

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
 Share

×
×
  • Create New...