Jump to content

SciTE - Internet search in the editor based by search engine or search site.

Recommended Posts


This lua script gives you the ability, to search for selected text or word from cursor in an search engine or on an search site of your choice.You can select the engine/site from a list, that you have defined in your user properties.

To get the right call for your search engine, open the engine and search for one word. You need the url without the searched word. Write to your properties an display name for this engine and, separated by a comma, the url. See my example in the script header.

For the list with  search sites, you need display name and site address (without http://).

It will searched for the full selected text or, if none selection exists, for the word touched by the cursor. You can allow in the properties, that also will recognized words with dots (like objVar.Property).

The script uses the shell.dll. But if you don't have installed it, the browser will opened with an command line call. Thats why the command window will pop up for a short moment.

You'll find details for installation and key bindings inside the script. Look for free command numbers in SciTE. By default installation, the numbers must be greater than 35 (max. 49).

-- TIME_STAMP   2018-09-02 09:22:03


	This script publicates two functions
	- InetSearch.Engine()
	  You can search for the selected/touched text in SciTE and can select a search engine of your choice.

	- InetSearch.Site()
	  You can search for the selected/touched text in SciTE with a defined search engine and can select a search site of your choice.

	Copy this script in your Lua scripts folder.
	Load this file in the Lua startup: dofile("Full\\Path\\InetSearch.lua")

	in "SciTEUser.properties" the following properties with search engines and search sites of your choice:

	#~ Inet Search Settings
	#~ List of engines. "display-name,search-url" (if not set: google.com will used)
	#~ If only one entry exists, the selection box will not shown.
	Inet.Search.Engines= \
	Google,https://www.google.de/search?q=| \
	MetaGer,https://metager.de/meta/meta.ger3?focus=web&eingabe=| \
	Bing,https://www.bing.com/search?q=| \
	Ask,https://de.ask.com/web?q=| \

	#~ Engine for site based search
	#~ Use display name from engines list (if not set: google.com will used)

	#~ List of sites for site based search. "display-name,site-url"
	#~ If not set, it searches without a special site.
	#~ If only one entry exists, the selection box will not shown.
	Inet.Search.SearchOnSite.Sites= \
	AutoIt DE,autoit.de| \
	AutoIt EN,autoitscript.com| \

	#~ By default, words will detected without dots. (0)
	#~ You can allow dots, to detect object variables with properties or methods too.

	#~ Search commands
	#~ Search word from cursor with engine selection
	command.name.9.*=Search with engine selection
	command.9.*=dostring InetSearch.Engine()

	#~ Search word from cursor with search site selection
	command.name.5.*=Search with site selection
	command.5.*=dostring InetSearch.Site()


InetSearch = {}
InetSearch.Handler = EventClass:new(Common)

	local engineFallback = "Google,https://www.google.com/search?q="  -- default search engine: "display-name,search-url"
	local search_type    = nil
	local engine_url     = nil
	local search_item    = nil
	local search_site    = nil
	local tableSelection = nil
	local list_type      = 16

	------------------------------------------------------------------------- Load library protected
	local require_protected = function(_lib)
		local loaded_lib
		if pcall(function() loaded_lib = require(_lib)  end) then return loaded_lib
		else return nil end
	end --> require_protected
	local shell = require_protected("shell")                    -- loads the shell library if exists

	------------------------------------------------------------------------------ Starts the search
	local RunSearch  = function(_item, _url, _site)
		local sSite = ''
		if _site ~= nil then sSite = "%20site:".._site end
		local sCmd = _url.._item..sSite
		if shell then shell.exec(sCmd)
		else os.execute('start "" "'..sCmd..'"') end
	end --> RunSearch

	----------------------------------------------------------------------------- Show the user list
	local ShowSelectionList = function()
		-- create the selection list (display names from engines or sites)
		local sep, list = '_', tableSelection[1][1]
		for i = 2, #tableSelection do
			list = list..sep..tableSelection[i][1]
		local sep_tmp = editor.AutoCSeparator
		editor.AutoCSeparator = string.byte(sep)
		editor:UserListShow(list_type, list)
		editor.AutoCSeparator = sep_tmp
	end --> ShowSelectionList

	--------------------------------------------------------------------------- Select the user list
	function InetSearch.Handler:OnUserListSelection(_tp, _sel)
		if _tp == list_type then
			local url
			for i = 1, #tableSelection do
				if tableSelection[i][1] == _sel then
					url = tableSelection[i][2]
			if search_type == 'site' then
				search_site = url
				search_site = nil
				engine_url = url
			RunSearch(search_item, engine_url, search_site)

	--------------------------------------------------------- List of search engines from properties
	local GetEngines = function()
		local sEngines = props['Inet.Search.Engines']
		-- without settings, the default search engine will used
		if sEngines == '' then sEngines = engineFallback end
		local tEngines = {}
		for entry in sEngines:gmatch('([^|]+)|-') do
			for name, url in entry:gmatch('([^,]+),(.+)') do
				table.insert(tEngines, {name, url})
		return tEngines
	end --> GetEngines

	----------------------------------------------------------- List of search sites from properties
	local GetSearchSites = function()
		local sSites = props['Inet.Search.SearchOnSite.Sites']
		if sSites == '' then return nil end
		local tSites = {}
		for entry in sSites:gmatch('([^|]+)|-') do
			for name, url in entry:gmatch('([^,]+),(.+)') do
				table.insert(tSites, {name, url})
		return tSites
	end --> GetSearchSites

	-------------------------------------------------------------------------------- Get search item
	local GetSearchItem = function()
		local sSelect = editor:GetSelText()
		if sSelect ~= '' then return sSelect end

		local allowDots = false
		if props['Inet.Search.Allow.Punctuation'] == '1' then allowDots = true end

		local caret = editor.CurrentPos
		local iLine = editor:LineFromPosition(caret)
		local iZero = editor:PositionFromLine(iLine)
		local iLineEnd = editor.CurrentPos
		editor.CurrentPos = caret

		local iStart = editor:WordStartPosition(caret)
		if allowDots then
			while iStart > iZero and editor:textrange(iStart -1, iStart) == '.' do
				iStart = editor:WordStartPosition(iStart -1)
		local iEnd = editor:WordEndPosition(caret)
		if allowDots then
			while iEnd < iLineEnd and editor:textrange(iEnd, iEnd +1) == '.' do
				iEnd = editor:WordEndPosition(iEnd +1)
		sSelect = editor:textrange(iStart, iEnd):gsub('^([^%w]+)', ''):gsub('([^%w]+)$', '')

		return sSelect
	end --> GetSearchItem

	------------------------------------------------------------------- Search with engine selection
	local SearchEngineBased = function()
		search_type = 'engine'
		search_item = GetSearchItem()
		if search_item == '' then return nil end
		tableSelection = GetEngines()
		-- only one entry: selection box will not shown
		if #tableSelection == 1 then
			RunSearch(search_item, tableSelection[1][2], nil)

	end --> SearchEngineBased

	-------------------------------------------------------------- Search with search site selection
	local SearchSiteBased = function()
		search_type = 'site'
		search_item = GetSearchItem()
		if search_item == '' then return nil end
		-- get the default engine for site based searching
		for _, url in engineFallback:gmatch('([^,]+),(.+)') do
			engine_url = url
		-- if is set, use search engine from properties
		local sEngine = props['Inet.Search.SearchOnSite.Engine']
		if sEngine ~= '' then
			local tEngines = GetEngines()
			for i = 1, #tEngines do
				if tEngines[i][1] == sEngine then
					engine_url = tEngines[i][2]
		tableSelection = GetSearchSites()
		-- if none entries for search sites, use simple search
		if tableSelection == nil then
			RunSearch(search_item, engine_url, nil)
			-- only one entry: selection box will not shown
			if #tableSelection == 1 then
				RunSearch(search_item, engine_url, tableSelection[1][2])
	end --> SearchSiteBased

	---------------------------------------------------------------------------- Publicate functions
	InetSearch.Engine = SearchEngineBased
	InetSearch.Site = SearchSiteBased



Edited by BugFix

Best Regards BugFix  

Share this post

Link to post
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

  • Similar Content

    • Ascer
      By Ascer
      I've read a article about lua functions here: https://debian-administration.org/article/264/Embedding_a_scripting_language_inside_your_C/C_code
      There are two ways of include lua scripts to your AutoIt code.
      1. Run lua functions by Autoit.
      2. Register Autoit function and run as lua.
      It's even possible to apply second way to AutoIt?
      As we can see on example there a few functions to make it possible.
      It's a lua file save as average.lua
      avg, sum = average(10, 20, 30, 40, 50) print("The average is ", avg) print("The sum is ", sum) This is a C functions to run lua. Can be convert to AutoIt ofc.
      There is a problem with func lua_register(L, "average", average)
      this function is not even detected in Lua51.dll
      We can use lua_pushcclosure instead.
      #include <stdio.h> #include "lua.h" #include "lualib.h" #include "lauxlib.h" /* the Lua interpreter */ lua_State* L; /* The function we'll call from the lua script */ static int average(lua_State *L) { /* get number of arguments */ int n = lua_gettop(L); double sum = 0; int i; /* loop through each argument */ for (i = 1; i <= n; i++) { if (!lua_isnumber(L, i)) { lua_pushstring(L, "Incorrect argument to 'average'"); lua_error(L); } /* total the arguments */ sum += lua_tonumber(L, i); } /* push the average */ lua_pushnumber(L, sum / n); /* push the sum */ lua_pushnumber(L, sum); /* return the number of results */ return 2; } int main ( int argc, char *argv[] ) { /* initialize Lua */ L = lua_open(); /* load Lua base libraries */ lua_baselibopen(L); /* register our function */ lua_register(L, "average", average); /* run the script */ lua_dofile(L, "average.lua"); /* cleanup Lua */ lua_close(L); return 0; }  
    • ademon
      By ademon
      Hi. I can open the editor with out problems but I can not compile because it is placed on another partition diferent from C.
      Can you provide an update of this bug?

    • Myicq
      By Myicq
      This may be a dumb question.. but my vertical screen space is fairly limited. I don't need (always) to see all the debug output from autoIT compiler, wrapper etc.
      Can I turn this part off: (optionally)
      >"D:\AutoIt3\SciTE\..\AutoIt3.exe" "D:\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "D:\temp\xx.au3" +>11:35:44 Starting AutoIt3Wrapper v.15.920.938.0 SciTE v. Keyboard:00000406 OS:WIN_7/Service Pack 1 CPU:X64 OS:X86 Environment(Language:0406) +> SciTEDir => D:\AutoIt3\SciTE UserDir => C:\Users\XXX\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\XXX\AppData\Local\AutoIt v3\SciTE >Running AU3Check ( from:D:\AutoIt3 input:D:\temp\XX.au3 +>11:35:44 AU3Check ended.rc:0 >Running:(\AutoIt3\autoit3.exe "D:\temp\xx.au3" --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop  
    • Jos
      By Jos
      7/8/2018: Uploaded a new SciTe4AutoIt3.exe v18.708.1148.0 installer.
      It has been over a year since the last update of the full SciTE4AutoIt3 installer whch mainly had to do with the fact that Neil was moving toward v4 of SciTE and I wanted to wait for a stable version.
      Any help with testing this version before general release is appreciated.
      Also any feedback is welcome in caseI missed something or suggestions for improvement before releasing.
      ==> SciTE4AutoIt3 v18.708.1148.0

      Addition/Changes/Fixes in the current installer:
      -------------------------------------------------------------------------------------------------- 8-7-2018 *** Merged the SciTE v 4.1.0 by Neil Hodgson with our own version of SciTE. (Jos)     This is a major change from the previous version so ensure you update all files including LUA or else you will get errors!     - SciLexer au3: Fixed issues with nested CommentBlocks not always showing the correct color.     - SciLexer au3: Change any line starting with # and no recognised keyword to be shown with the Pre-Processor in stead of default.     - Changed Shortcut for AU3INFO to Ctrl+Shift+F6.     - Moved the session restore logic for (save.session.advanced=1)into SciTE in stead of LoadSession.lua as that was clearing the recent files list of the last session       when opening a file by double cliking it. This is fixed with this change.       Default remains 0 so when a file is double clicked the last session isn't restored unless you add this to SciTEuser.properties:       "save.session.advanced=1"     - updated Tools.lua replacing [s%] with [ /t] to avoid empty lines being stripped by those functions. (Thanks Enyby) *** Updated AutoIt3Wrapper v18.708.1148.0 (Jos)     - 17.224.935.1 Added /autoit3dir to au3stripper commandline, when provided to AutoIt3Wrapper., to ensure the included files are for the correct AutoIt3 directory     - 17.224.935.2 Added directives:          #AutoIt3Wrapper_Res_CompanyName=          ;Company field          #AutoIt3Wrapper_Res_LegalTrademarks=      ;Trademark field     - 17.224.935.5 Fixed Versioning when files contain backets ->  ()     - 17.224.935.6 Added support for :          #AutoIt3Wrapper_Au3stripper_Stop_OnError=        ;(Y/N) Continue/Stop on Warnings.(Default=N)     - 17.224.935.7 added INI support for:           [Other]            Au3Stripper_Stop_OnError=n     - 17.224.935.10 Minor changes in console messages     - 17.224.935.11 Modifications from JPM:         - add #AutpIt3Wrapper_Res_Cursor_Add         - "clean" a little bit AutoIt3Wrapper.au3 *** Updated Au3Stripper v18.708.1148.0 (Jos)     - 17.224.935.1 Fixed crash when an include file contains longer record than 4096 characters.     - 17.224.935.2 Changed /rsln to replace @ScriptLineNumber in the Master script with "XXX/YYY". XXX is the master script linenumber, YYY is the Merged script linenumber.     - 17.224.935.3 Fixed issue detecting #cs #ce when a space was missing after the directive.     - 17.224.935.4 Changed Close/Open logic for Tracelog to (hopefully) avoid the hardcrash.     - 17.224.935.5 improved speed avoiding rereading include files to determine the max rec len.     - 17.224.935.6 improved speed by re-coding the check for long records.     - 17.224.935.7 Made sure the returncode is the highest from all iterations in stead of the last iteration.     - 17.224.935.8 fix for reported bug: https://www.autoitscript.com/trac/autoit/ticket/3623#comment:4     - 17.224.935.9 added support for #autoit3wrapper_autoit3dir     - 17.224.935.10 Fixed support for #autoit3wrapper_autoit3dir when followed by linecomment                     Stop processing when include file isn't found.     - 18.624.1847.1 strip the leading and trailing double quotes from the autoit3dir directive to avoid an error when they are specified.     - 18.624.1847.2 Fixed Hardcrash in the Include logic     - 18.624.1847.3 Fixed Hardcrash in Func stripping logic by enlarging the base table size     - 18.702.1556.1 Fixed regression bug with the Translate option.     - 18.703.1808.2 Fixed regression bug with the Stripping FUNC logic for the first found FUNC. *** Updated SciTEConfig v18.708.1148.0 (Jos)     - 17.224.935.1 No updates *** Updated Tidy v18.708.1148.0 (Jos)     - 17.224.935.1 Added option  to copy comments from #CS to #CE. Default is to copy the comments.                    Added Tidy Parameters:  /Skip_CE_Comment or /scec will skip this copy action                    Added INI option:                      * * *  Add comment to #CE/#CommentEnd and make it the same as the #CS/CommentStart Comments.                      ce_comment=1     - 17.224.935.2 Fix issue with Copy comments on comment start - end     - 17.224.935.4 Fix another issue with Copy comments on comment start - end -------------------------------------------------------------------------------------------------- ==> ScitillaHistory page containing all SciTE-Scintilla updates.
      ==> Visit the SciTE4AutoIt3 Download page for the latest versions
      ==> Check the online documentation for an overview of all extra's you get with this installer.
    • sumanth1980
      By sumanth1980
      Here i am wrote a simple lines to install basic applications but when i clicked on one application/program to install it was working fine but when i cancel the program in the middle to install another program it was not working. I am not an expert in this but i want a solution for this ... Can any one help me on this....