Programmatically interact with the SciTE editor via COM objects

SciTE editor via COM objects

SciTE editor via COM objects

SciTE is a great IDE that I use with AutoHotKey, SPSS, SQL, Python, XML, HTML, etc.   I love being able to use regular expressions in it to manipulate text and it has some very cool capabilities.  This video is one of my favorite demonstrations how powerful SciTE can be at manipulating text.

Here is a short tutorial and demonstration on how to manipulate SciTE editor via COM objects and Windows commands with AutoHotKey.

 

SciTE editor via COM objects- Editor Windows Commands

 
;~ http://www.scintilla.org/SciTEDoc.html  ;SciTE commands
;~ http://www.scintilla.org/SciTEDirector.html  SciTE Director Interface
;~ http://www.scintilla.org/ScintillaDoc.html  ;SciTE documentation
;~ https://www.youtube.com/watch?v=upPtaEghnRM
#SingleInstance, Force                   
RAlt::Reload
RControl::
;************SciTE editor via COM objects- Editor Windows Commands************************************************
oSci := ComObjActive("SciTE4AHK.Application") ;get pointer to active SciTE editor window
;~ MsgBox % oSci.Selection ;Text that is selected
;~ MsgBox % oSci.Document ;get entire SciTE document
;~ MsgBox % oSci.CurrentFile ;path to current file
 
;~ MsgBox % oSci.SciTEHandle ;window handle
;~ MsgBox % oSci.ActivePlatform ;
;~ MsgBox % oSci.UserDir
;~ MsgBox % oSci.Version
;~ MsgBox % oSci.IsPortable ;I'm guessing blank means not portable. Prob a 1=portable
;~ MsgBox % oSci.SciTEDir
;~ oSci.ReloadProps() ;Reload property files
;~ oSci.OpenFile("C:\temp\test.ahk")
;~ oSci.DebugFile("C:\temp\test.ahk")
 
;***********tabs******************* 
;~ MsgBox %  oSci.Tabs.count
;~ oSci.SwitchToTab(1) ;Switch to tab (zero based)
;~ MsgBox % oSci.Tabs.List ;list of open tabs
 
 
;~ for Tab_Path in oSci.Tabs.Array ;path to each open Tab
  ;~ MsgBox % "tab " A_Index a_tab Tab_Path
 
;~ oSci.InsertText("my Text") ;insert my Text
;~ oSci.InsertText(";my Text",30) ;insert my Text at position 30
 
;~ oSci.Message(0x111,420)  ;Clear output
;~ oSci.Output("hello world") 
 
;***********Send DirectoryMessage******************* 
;~ oSci.SendDirectorMsg("close:") ;close (lots of director messages to send
;~ oSci.SendDirectorMsg("find:Joe") ;find the next instance of the word Joe
;~ oSci.SendDirectorMsg("replaceall:Joe\000Bob") ;replace all occurrencees of Joe with Bob
;~ oSci.SendDirectorMsg(saveas)
 
;***********SendMessage******************* 
;~ https://autohotkey.com/docs/misc/SendMessageList.htm    0x111 is WM_COMMAND
;~ https://msdn.microsoft.com/en-us/library/windows/desktop/ms647591(v=vs.85).aspx
 
;~ oSci.Message(0x111,101)  ;create new tab
;~ oSci.Message(0x111,102)  ;Open File
;~ oSci.Message(0x111,103)  ;Open selected file name
;~ oSci.Message(0x111,104)  ;Revert file
;~ oSci.Message(0x111,105)  ;Close file
;~ oSci.Message(0x111,106)  ;Save file
;~ oSci.Message(0x111,110)  ;Save As
;~ oSci.Message(0x111,111)  ;Export as HTML
;~ oSci.Message(0x111,112)  ;Export as RTF
;~ oSci.Message(0x111,113)  ;Export as PDF
;~ oSci.Message(0x111,115)  ;Export as LaTeX
;~ oSci.Message(0x111,116)  ;Save a copy
;~ oSci.Message(0x111,118)  ;Copy path of this file
;~ oSci.Message(0x111,130)  ;Page Setup
;~ oSci.Message(0x111,131)  ;Print
;~ oSci.Message(0x111,132)  ;Load Session
;~ oSci.Message(0x111,133)  ;Save current Session
;~ oSci.Message(0x111,140)  ;Quit SciTE
;~ oSci.Message(0x111,150)  ;clear encoding?
;~ oSci.Message(0x111,151)  ;UTF-16 Big Endian
;~ oSci.Message(0x111,152)  ;UTF-16 Little Endian encoding
;~ oSci.Message(0x111,153)  ;UTF-8 with BOM
;~ oSci.Message(0x111,154)  ;UTF-8
 
;~ oSci.Message(0x111,201)  ;Undo
;~ oSci.Message(0x111,202)  ;Redo?
;~ oSci.Message(0x111,203)  ;Cut
;~ oSci.Message(0x111,204)  ;Copy Highlighted text
;~ oSci.Message(0x111,205)  ;Paste?
;~ oSci.Message(0x111,206)  ;Delete
;~ oSci.Message(0x111,207)  ;Highlight all text in main window / Select All
;~ oSci.Message(0x111,208)  ;Paste text 
 
;~ oSci.Message(0x111,230)  ;Match to brace (finds matching brace
;~ oSci.Message(0x111,232)  ;Show Calltip
;~ oSci.Message(0x111,234)  ;Complete word
 
 
;~ oSci.Message(0x111,240)  ;UPPERCASE selected text
;~ oSci.Message(0x111,241)  ;Lowercase selected text
;~ oSci.Message(0x111,242)  ;Block Comment (toggle ;~ on multiple lines)
;~ oSci.Message(0x111,244)  ;Stream comment */text/*
;~ oSci.Message(0x111,245)  ;Copy as RTF
;~ oSci.Message(0x111,246)  ;Box comment */ mutliple lines`n /*
;~ oSci.Message(0x111,248)  ;Join Paragraph
;~ oSci.Message(0x111,303)  ;run (F5)
;~ oSci.Message(0x111,304)  ;Stop
;~ oSci.Message(0x111,401)  ;output - verticle split- toggle
;~ oSci.Message(0x111,402)  ;View whitespace
;~ oSci.Message(0x111,403)  ;View End of Line
;~ oSci.Message(0x111,404)  ;???????????
;~ oSci.Message(0x111,405)  ;View extra space after number
;~ oSci.Message(0x111,406)  ;View Margin
;~ oSci.Message(0x111,407)  ;View linenumbers
;~ oSci.Message(0x111,408)  ;View Toolbar
;~ oSci.Message(0x111,409)  ;View output bar
;~ oSci.Message(0x111,410)  ;View Tab bar
;~ oSci.Message(0x111,411)  ;View statusbar
;~ oSci.Message(0x111,412)  ;View parameters
;~ oSci.Message(0x111,414)  ;Wrap
;~ oSci.Message(0x111,415)  ;Wrap output
;~ oSci.Message(0x111,420)  ;Clear output
;~ oSci.Message(0x111,421)  ;Switch pane
;~ oSci.Message(0x111,461)  ;Open SciTEUser.Properties filew
;~ oSci.Message(0x111,960)  ;Always on top
;~ oSci.Message(0x111,1118) ;Open new SciTE window
;~ oSci.Message(0x1000+2)   ;reload utilities?
;****** end of SciTE editor via COM objects*****
;***********use spy to find wm_command;******************* 
;~ https://autohotkey.com/board/topic/90307-hotkeyp-spy-utility-for-detecting-wm-command-messages/

A specific version of the SciTE editor for AutoHotKey can be downloaded here and more generic documentation can be found here.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.