Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 24 additions & 2 deletions Terminal.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from collections import Mapping, Sequence
import sublime
import sublime_plugin
import os
Expand Down Expand Up @@ -30,8 +31,27 @@ def get_setting(key, default=None):
os_specific_settings = sublime.load_settings('Terminal (OSX).sublime-settings')
else:
os_specific_settings = sublime.load_settings('Terminal (Linux).sublime-settings')
return os_specific_settings.get(key, settings.get(key, default))

return substitute_variables(os_specific_settings.get(key, settings.get(key, default)))

def substitute_variables(value, variables=sublime.active_window().extract_variables()):
# type: (Mapping, Any) -> Any
# Utilizes Sublime Text's `expand_variables` API, which uses the
# `${varname}` syntax and supports placeholders (`${varname:placeholder}`).

if isinstance(value, str):
# Workaround https://github.com/SublimeTextIssues/Core/issues/1878
# (E.g. UNC paths on Windows start with double slashes.)
value = value.replace(r'\\', r'\\\\')
value = sublime.expand_variables(value, variables)
return os.path.expanduser(value)
elif isinstance(value, Mapping):
return {key: substitute_variables(val, variables)
for key, val in value.items()}
elif isinstance(value, Sequence):
return [substitute_variables(item, variables)
for item in value]
else:
return value

class TerminalSelector():
default = None
Expand Down Expand Up @@ -190,6 +210,8 @@ def run(self, paths=[], parameters=None, terminal=None):

if parameters is None:
parameters = get_setting('parameters', [])
else:
parameters = substitute_variables(parameters);

if os.path.isfile(path):
path = os.path.dirname(path)
Expand Down