Releases: noahcoad/SublimeOpenUrl
Release list
3.1.2
3.1.2
Housekeeping release, from the Package Control reviewer's report on the channel
entry. No behavior changes to how URLs and paths are matched or opened.
Fixes
No more console flash on Windows
Windows gives every child process its own console window unless it's told not
to, so the helpers Open URL launches only for their side effect flashed an empty
black box on screen. Four launch sites now pass CREATE_NO_WINDOW:
- System Open —
starthands the file off and exits immediately, so its
console was pure flicker; the app that opens is a separate process. - Open in a new Sublime window
- Custom openers run through the
runsentinel - Path transforms run through a shell command
Run in Terminal is deliberately unchanged — a visible console is the whole
point of that command.
Linux and Windows key bindings no longer leak onto macOS
The Linux/Windows bindings lived in Default.sublime-keymap, which Sublime
Text loads on every platform, macOS included. So a Mac install quietly got
three bindings it was never meant to have (ctrl+alt+u,
ctrl+alt+shift+o, ctrl+alt+shift+d) plus a collision on
ctrl+alt+shift+u, where the macOS file happened to win.
That file is now split into Default (Windows).sublime-keymap and
Default (Linux).sublime-keymap. Every platform gets exactly the bindings
documented in the readme, and nothing else.
If you had customized bindings in your User keymap, they're untouched.
Preferences → Key Bindings opens the right file off macOS
The menu item pointed at Default ($platform).sublime-keymap, which only ever
resolved on macOS — on Windows and Linux there was no such file to show. Fixed
by the split above. Both Settings and Key Bindings now also open your
User file side by side, so there's somewhere to type.
disable_default_key_bindings now also disables alt+double-click
The mouse binding was missing the guard the six key bindings all had, so it
stayed live after you'd turned the defaults off.
Internals
url.py moved to lib/url.py. Sublime Text loads every root-level .py in a
package as an independent plugin, so a shared helper sitting in the root was
being imported twice under two names. Nothing user-facing depends on it.
3.1.1
3.1.1
Three long-standing bug reports, closed.
Fixes
URLs with a comma in the query string open whole
https://www.google.com/search?q=one,two opened ?q=one. A comma is a token
delimiter — it's what splits notes.txt,other.txt into two paths — but it's
also perfectly legal in a query string, and a delimiter walk can only look one
way at a time.
A scheme://... URL is now matched as a unit, so any cursor position inside it
selects the whole thing. Comma-separated paths still split as before.
While in there:
- Trailing sentence punctuation (
.,;:!?) is trimmed, sosee https://example.com.
opens without the period. - Parens are kept when balanced (
.../Foo_(bar)) and dropped when they're a
wrapper ((https://example.com)). - A quote, angle, square, or curly wrapper is never part of the URL.
- Two URLs on one line are separate spans; the one under the cursor wins.
Thanks to @oifj34f34f for the report.
Revealing a folder on Windows no longer prints a traceback
explorer returns exit status 1 even when it opened the folder fine. The
subprocess ran under check_call inside a worker thread, so that turned every
successful reveal into an unhandled CalledProcessError traceback in the
console. The exit code is now ignored; the child's own stderr still reaches the
console.
Thanks to @eugenesvk for the report.
Note on file_suffixes
With file_suffixes set, a name that isn't a path is retried once per suffix
before falling through to a web search, and each suffix multiplies against
aliases, search_paths, and file_prefixes. On a partial URL like
//example.com/ that has been measured in seconds.
The default is unchanged ([".js"]) so nothing breaks, but the setting now
carries a warning. If you don't resolve bare names, set it to []:
{ "file_suffixes": [] }Already fixed, if you were waiting on it
Two open reports turned out to be resolved by 3.0.0 and 3.1.0:
startneeding an empty title argument on Windows — thesystem_open
sentinel has passedcmd.exe /c start "" <path>since 3.0.0.- Opening
[label](URL)with the cursor in the label — inline markdown
links have resolved to their target from any position inside the link since
3.1.0.
3.1.0
3.1.0
What's new
Paths with spaces select whole from inside brackets
Only the quote pairs (`"" '' ```) used to hold a spaced path together.
The bracket pairs fell through to the plain token walk and split at the first
space, so this never resolved:
(~/OneDrive/Q CST - ALL/Customers/3M)
(), [], {}, and <> are now enclosing pairs too. Brackets nest, so
they're depth-matched in both directions — a markdown - [ ] checkbox is no
longer mistaken for an opener — and when pairs nest, the innermost wins.
[my file.py]:42 also resolves now; the wrapper used to survive and break the
lookup.
${VAR} is still a path chunk, never a brace pair, so ${HOME}/Desktop
selects whole.
Wrapped path plus prose
When the quotes wrap a path and a comment, the whole string isn't a path,
so the wrapper is ignored and the token under the cursor is used instead:
- "~/txt/notes.txt — reference for this prompt"
The cursor anywhere in the path opens the file, :42 suffix included. This
only kicks in when the wrapped text doesn't resolve and the bare token does,
so a genuine spaced path ("~/Q CST - ALL/3M") still selects whole. Put the
cursor in the prose half and you get the whole quoted string.
Markdown links resolve from anywhere inside them
The cursor can sit on either bracket, in the label, on the paren, or in the
target of an inline [label](target) link — Open URL resolves the
target. Handles targets with spaces (bare or <angle>-wrapped), a "title"
suffix, one level of nested parens, and deep-link suffixes. Empty targets fall
back to plain expansion.
Use Input prefills from the clipboard
Open URL: Use Input opened an empty panel. It now prefills (and Sublime
preselects) the clipboard when it looks like a path or URL — anything that
resolves on disk, including deep links (~/notes.md:85) and paths with
spaces, plus single path-ish tokens (~/, ./, /, C:\, ://, a bare
domain) so a not-yet-created path can be edited before opening. Whitespace, an
enclosing quote/bracket pair, and a file:// scheme are stripped first. Prose,
multi-line, and oversized clipboards leave the panel empty, as before.
New command: System Open this File
Open URL: System Open this File hands the file in the active view to the OS
default opener — open on macOS, xdg-open on Linux, cmd /c start on
Windows. It's the system_open menu action aimed at the file you're editing
rather than a path under the cursor, so there's nothing to select first. Handy
for previewing a markdown file, HTML page, image, or CSV in its registered app.
| macOS | Linux/Windows | |
|---|---|---|
| Open URL: System Open this File | ctrl+alt+o | ctrl+alt+shift+o |
On Linux/Windows the binding avoids ctrl+alt+o, which SFTP and
OmniMarkupPreviewer already claim. Disabled for unsaved buffers, since there's
no path to hand off. Like every default binding, it's silenced by
open_url.disable_default_key_bindings.
Wrapping copied and pasted paths
Two new settings keep a path or deep link re-selectable as one token wherever
it lands. Both default to a backtick, matching what Markdown views already did.
| Setting | Default | What it does |
|---|---|---|
plain_text_path_wrap_char |
"`" |
Encloses a path pasted by Paste Relative Path in a non-Markdown view when it holds a space (or another char that would break re-selection) or carries a deep-link suffix. |
copy_path_wrap_char |
"`" |
The copy-side mirror: encloses a path or deep link put on the clipboard by Copy Deep Link / Copy Transformed Path. Deep links always; plain paths only when a char would break re-selection. |
So ~/notes.txt:42:/^first five words/ copies as
`~/notes.txt:42:/^first five words/` and pastes back as one token.
If the wrap char already appears in the path, the next available quote (",
', `) is used. Set either to "" for the previous behavior — bare on
copy, and on paste a quote only when a char would break re-selection.
Paste Relative Path strips one enclosing pair off the clipboard, so a
wrapped link round-trips without doubling up.
Fixes
parse_file_locationstripped quotes but not brackets, so a bracket-wrapped
deep link kept its wrapper and wouldn't resolve.- The enclosing-delimiter set had drifted across four hardcoded lists —
{}
was missing from all of them. Everything now derives from one
ENCLOSING_PAIRStuple. ${VAR}had two different spellings in the code that disagreed on
${A B}; now one definition, shared by the token walk and the deep-link
regex.- The test suite moved into
tests/, so Sublime stops logging
reloading plugin open-url.test_open_urlon every save.
Compatibility
No settings changed meaning and no keybinding was reassigned. The only
user-visible default shifts are the two new wrap chars — set both to "" to
get 3.0.1's copy and paste output back:
{
"plain_text_path_wrap_char": "",
"copy_path_wrap_char": ""
}3.0.1
3.0.1
Fixes
Copy Deep Link regexes are easier to read
Generated deep links used to join words with \s+:
stream.md:6:/^#\s+2026-08-05\s+"The\s+Containment\s+Brothers"/
Words are now joined by a literal space, so the same link reads:
stream.md:6:/^# 2026-08-05 "The Containment Brothers"/
Only gaps that aren't a single plain space — a tab, or a run of spaces —
still become \s+, so the regex always matches the line it was copied from.
Leading indentation is still ^\s*, which keeps the anchor working when a
line gets re-indented. Existing links with \s+ continue to work.
Deep links containing spaces or quotes now open from any cursor position
With the cursor inside the quoted part of a link like
stream.md:6:/^# 2026-08-05 "The Containment Brothers"/, Open URL would
select just The Containment Brothers instead of the whole link, and fail.
Placing the cursor at the start of the link had the same problem, stopping at
the first space. Deep-link tokens are now matched as a unit, so any cursor
position inside one opens it — including when the link is wrapped in quotes or
backticks, inside a markdown link, or sharing a line with another link.
Deep links whose regex ends in a colon now parse
f.py:12:/^def foo\(x\):/ and f.md:1:/^key: value/ were unparseable — the
colon inside the regex body was mistaken for the location separator, so Python
def/if lines and YAML keys produced broken links. A location suffix now has
to be complete (a bare line number, an N-M range, or a closed /.../ or
"...") before it's treated as one.
3.0.0
What's new in v3.0.0
New commands
- Select URL (
select_url) — expands selection to the nearest URL/path using the same matching logic as Open URL - Copy Deep Link (
copy_deep_link) — copies a deep link to the current file and cursor position - Copy Transformed Path (
copy_transformed_path) — copies the file path after applying an optional shell transform - Paste Relative Path (
paste_relative_path) — pastes the clipboard path as the shortest relative form from the current file
Deep links
- Full deep-link support:
file:42,file:/regex/,file:"text",file:start-end,file:42:/regex/ - Deep links in copied paths re-select as one token when pasted
Autoactions
- New
autoactionssetting: auto-open or pre-highlight menu entries based on file extension or pattern - Defaults include auto-open for
.txt,.md,.log,.config,.sublime-settings,.sublime-project
Sentinel commands
file_custom_commandsandfolder_custom_commandsnow accept sentinel strings:"edit_in_sublime","open_in_new_window","system_open","add_to_project"open_in_new_windowandadd_to_projectincluded in defaults for both files and folders
Other improvements
- Line-start scan heuristic: cursor at start of line scans the line for a URL
- Multi-line selection opens each non-empty line as a separate URL
- Empty-line dialog: running Open URL on an empty line shows a helpful message instead of silently opening the current file
file://URI scheme stripped before resolution- Backslash-escaped spaces in paths handled (
hello\ world.txt) - Preferences menu added under
Preferences > Package Settings > Open URL - All commands prefixed consistently as
Open URL:in the Command Palette
2.8.1
2.8.0
Allow search on matched file or directory
You can search for a path using searchers if even the path matches a file or directory on your file system.
Sublime Text 3 tags are now prefixed with st3-. The Sublime Text 4 versions of the plugin have normal semver release tags.