Code: Select all
--
-- Name: Web Search
--
-- Author: Jussi Jumppanen
--
-- Language: Lua Macro
--
-- Description: This Lua macro takes the current word or marked area and tries
-- to determine if the text should be loaded as a url or the text
-- details used in a web search.
--
-- How To Run: All Zeus macros can be run using the macro execute menu
-- item or they can be bound to the keyboard or they can
-- be attached to the macro drop down or popup menus.
--
local utils = require "utils"
function encodeChar(chr)
return string.format("%%%X",string.byte(chr))
end
function encodeString(str)
local output, t = string.gsub(str,"[^%w]",encodeChar)
return output
end
function getLanguage()
local language = ""
local extension = string.lower(macro_tag("$Ext"))
if (extension == ".ada") then
language = "ada"
elseif ((extension == ".asax" ) or
(extension == ".ascx" ) or
(extension == ".asmx" ) or
(extension == ".asp" ) or
(extension == ".aspx" )) then
language = "asp.net"
elseif (extension == ".bat" ) then
language = "cmd"
elseif ((extension == ".c" ) or
(extension == ".h" )) then
language = "clang"
elseif ((extension == ".cpp" ) or
(extension == ".cxx" ) or
(extension == ".hpp" ) or
(extension == ".hxx" ) or
(extension == ".cppm" )) then
language = "c++"
elseif ((extension == ".cs" )) then
language = "c#"
elseif ((extension == ".d" )) then
language = "dlang"
elseif ((extension == ".f" ) or
(extension == ".for" ) or
(extension == ".f77" ) or
(extension == ".f90" ) or
(extension == ".f95" ) or
(extension == ".ftn" ) or
(extension == ".fort" )) then
language = "fortran"
elseif ((extension == ".go" )) then
language = "golang"
elseif ((extension == ".html" ) or
(extension == ".htm" )) then
language = "html"
elseif ((extension == ".java" )) then
language = "java"
elseif ((extension == ".js" )) then
language = "javascript"
elseif ((extension == ".php" ) or
(extension == ".php3" ) or
(extension == ".php4" ) or
(extension == ".phtml")) then
language = "php"
elseif ((extension == ".bas" ) or
(extension == ".vba" ) or
(extension == ".vbs" ) or
(extension == ".frm" )) then
language = "VisualBasic"
elseif (extension == ".lua") then
language = "lua"
elseif ((extension == ".rc" ) or
(extension == ".rh" ) or
(extension == ".dlg" )) then
language = "resource"
elseif (extension == ".pas" ) then
language = "pascal"
elseif ((extension == ".py" ) or
(extension == ".pl" ) or
(extension == ".pm" )) then
language = "python"
elseif (extension == ".sql" ) then
language = "sql"
end
-- local message_text = ""
-- message_text = message_text .. "extension: " .. extension .. "\n"
-- message_text = message_text .. "language: " .. language .. "\n\n"
-- message_box(1, message_text, "Language Details")
return language
end
function key_macro()
-- get the current word or marked area
local current_word = macro_tag("$WEX")
if (string.len(current_word) == 0) then
message("To run a search place the cursor on a word or mark a region of text.")
beep()
return
end
if is_marked() == 1 then
if string.starts(current_word, "https://", 1) or string.starts(current_word, "http://", 1) then
message("Opening URL: " .. current_word)
shell_execute(current_word)
return
end
end
local query = ""
local language = getLanguage()
if (string.len(language) > 0) then
query = "\"" .. encodeString(language) .. "\"+"
end
query = query .. "\"" .. encodeString(current_word) .. "\""
engines = { "https://www.google.com/search?q=",
"https://duckduckgo.com/?q=",
"https://www.bing.com/search?q=",
"https://search.yahoo.com/search?q=" }
for key, engine in ipairs(engines)
do
url = engine .. query
message("Search URL: " .. url)
shell_execute(url)
end
-- limit search to stackoverflow using google
query = encodeString("site:stackoverflow.com") .. "+" .. query
url = engines[1] .. query
shell_execute(url)
end
key_macro() -- run the macro