Scite Open Url |
|
The following function opens the selected text as a URL in the default browser.
If there is no selection, the text under cursor is parsed and anything starting
with 'http://
', 'ftp://
' or 'www.
' is taken as the URL. The URL
must be on one line only, delimited by whitespace or single or double quotes.
The function can be set to a shortcut, say, to Ctrl+'
using the following
entry in the properties file:
command.name.1.*=Open URL in Browser command.1.*=open_url command.subsystem.1.*=3 command.mode.1.*=savebefore:no command.shortcut.1.*=Ctrl+'
This function has been tested on Ubuntu 6.10 and should work on later versions of Ubuntu. It is written in Lua 5.1, and thus needs SciTE 1.74 or better. The URL extraction code is primitive and can probably be improved. There is zero text encoding handling; text is taken and processed as 8-bit bytes in the function itself and nothing is transformed.
-- opens URL via selection or by checking text under cursor -- Kein-Hong Man <khman@users.sf.net> Public Domain 2008 -- * execute call is non-Win32! tested on Ubuntu 6.10 -- * URL delimited by ", ' or whitespace -- * does nothing about text encoding! function open_url() local string = string local function charat(s, p) return string.sub(s, p, p) end local function delim(c) return string.match(c, "[\"'%s]") end -- if there is a selection, use exactly, else analyze local txt = editor:GetSelText() if #txt == 0 then -- get details of current line, position local p1 = editor.CurrentPos local ln = editor:LineFromPosition(p1) txt = editor:GetLine(ln) if not txt then return end local p2 = editor:PositionFromLine(ln) p1 = p1 - p2 + 1; p2 = p1 -- extend text segment to left while p1 > 1 do if delim(charat(txt, p1 - 1)) then break end p1 = p1 - 1 end -- extend text segment to right while p2 <= #txt do if delim(charat(txt, p2)) then break end p2 = p2 + 1 end -- exit if nothing matched if p1 == p2 then return end txt = string.sub(txt, p1, p2 - 1) else -- trim extraneous whitespace txt = string.gsub(txt, "^%s*(.-)%s*$", "%1") -- fail on embedded whitespace if string.match(txt, "%s") then return end end if string.match(txt, "^http://.+") or string.match(txt, "^ftp://.+") or string.match(txt, "^www%..+") then --print("URL='"..txt.."'") --DEBUG os.execute("x-www-browser "..txt.." &") end end
Additional notes: 'gnome-open
' can also be used in place of
'x-www-browser
'. The former is more flexible, but may not be as
portable as the latter. (If someone can clarify whether 'gnome-open
'
works in a KDE distro, please update this wiki.)
Note that on Windows, Ctrl+Shift+O
already opens a URL under the
caret using the default browser, thanks to Philippe Lhoste. Blame the
contortions below on the flexibility of SciTE. In any case, the
information below is useful if a user wants to implement non-standard
behaviour.
On Windows, the following substitution (please change the browser's
executable path to the proper one on your machine) sort of work, but
os.execute()
may cause a console window to 'flash' (open and close
briefly):
os.execute([[D:\\Programs\\FirefoxPortable\\FirefoxPortable ]]..txt.." &")
Alternatively, the following shortcut works on Windows, but you will need to select the URL first:
command.name.1.*=Open URL in Browser command.1.*=d:/Programs/FirefoxPortable/FirefoxPortable $(CurrentSelection) command.subsystem.1.*=1 command.mode.1.*=savebefore:no command.shortcut.1.*=Ctrl+'
The 'start <url>
' idiom does not appear to work, because in both
the above cases, SciTE tries to execute a process by starting up an
executable file. start
however, appears to be tied to the command
interpreter, so it does not appear to be possible to use it here.
(This behaviour has not been exhaustively tested, so if it's wrong,
please update this page.)
I'm haven't studied how to retrieve the default browser path on Windows, so someone please update this if you know of better ways to open a URL in a browser on Windows.
--KeinHongMan--