В Sublime цвет вкладки файла всегда соответствует цвету фона файла, и единственное, что может измениться, это настройка color_scheme
.
В частности, даже несмотря на то, что API позволяет вам видеть цвета, используемые для определенного стиля, такого как вы указали в своем вопросе, нет прямого аналога функции API для непосредственного изменения одного из этих стилей.
Общая тактика будет заключаться в том, чтобы реагировать на информацию о том, что файл является рабочим файлом, изменяя настройку color_scheme
для этого файла на что-то другое, чтобы применить изменения цвета, которые вы хотите.
Это можно сделать вручную с помощью команды, как вы указали в своем вопросе, или вы можете использовать EventListener
для отслеживания событий в файлах, чтобы выполнить проверки для вас, чтобы изменение цвета было бесшовным, или некоторая их комбинация.
Примером такого плагина будет следующий:
import sublime
import sublime_plugin
# A global list of potential path fragments that indicate that a file is a
# production file.
_prod_paths = ["/production/", "/prod/"]
# The color scheme to apply to files that are production files.
#
# If the color scheme you use is a `tmTheme` format, the value here needs to
# be a full package resource path. For sublime-color-scheme, only the name of
# the file should be used.
_prod_scheme = "Monokai-Production.sublime-color-scheme"
# _prod_scheme = "Packages/Color Scheme - Legacy/Blackboard.tmTheme"
class ProductionEventListener(sublime_plugin.EventListener):
"""
Listen for files to be loaded or saved and alter their color scheme if
any of the _production_path path fragments appear in their paths.
"""
def alter_color_scheme(self, view):
if view.file_name():
# Get the current color scheme and an indication if this file
# contains a production path fragment,.
scheme = view.settings().get("color_scheme")
is_prod = any(p for p in _prod_paths if p in view.file_name())
# If this file is a production file and the color scheme is not the
# production scheme, change it now.
if is_prod and scheme != _prod_scheme:
view.settings().set("color_scheme", _prod_scheme)
# If the file is not production but has the production color scheme
# remove our custom setting; this can happen if the path has
# changed, for example.
if not is_prod and scheme == _prod_scheme:
view.settings().erase("color_scheme")
# Use our method to handle file loads and saves
on_load = on_post_save = alter_color_scheme
Каждый вид имеет свой собственный локальный объект settings
, который наследует настройки по умолчанию, но также позволяет вам предоставлять настройки для каждого вида. Здесь плагин применяет настройку color_scheme
, которая переопределяет унаследованную версию, когда обнаруживает, что файл содержит сегмент рабочего пути, и удаляет эту пользовательскую настройку (возвращаясь к унаследованной версии), если вы Save As
присваиваете файлу имя, которого нет длиннее производственный путь.
Оставшаяся часть головоломки состоит в том, как определить, какую цветовую схему вы хотите использовать здесь. Для приведенного выше примера я вручную создал дубликат Monokai.sublime-color-scheme
, который поставляется с Sublime, и изменил свойство background
, чтобы немного изменить отображаемый цвет.
В качестве альтернативы вы можете выбрать другую цветовую схему, чтобы использовать ее вместо производственной, или даже сгенерировать sublime-color-scheme
на лету.
В таком случае вы, вероятно, захотите использовать sublime.load_resource()
и sublime.decode_value()
для загрузки и декодирования sublime-color-scheme
в объект JSON, затем манипулировать цветами и сохранить файл как новый sublime-color-scheme
в вашем User
пакет.