有时候,我直接处理生产文件(我知道这很丑陋,并且会带来一些风险,但是目前,我别无选择)。我想要一种轻松识别我正在处理生产文件的方法。我可以使用file_name,因为生产文件位于生产文件夹(或等效文件夹)中。因此,我开始使用Sublime Text插件来更改标签背景或代码背景为另一种颜色。
我可以显示样式信息,但是我不知道如何更改此样式...
早期插件:
/Result/DataTables/DataTable/@Headers
插件的输出:
import sublime, sublime_plugin
class TestStCommand(sublime_plugin.TextCommand):
def run(self, edit):
if "production" in str(self.view.file_name()):
print("===== self.view.style() =====")
print(self.view.style())
您能给我一种在Sublime Text插件中以编程方式修改主题(或颜色)的方法吗?
答案 0 :(得分:2)
在Sublime中,文件选项卡的颜色始终遵循文件背景的颜色,唯一可以更改的是color_scheme
设置。
特别是,即使API允许您查看特定样式使用的颜色(如您在问题中指出的那样),API函数也没有直接类似的功能可以直接更改其中一种样式。< / p>
然后,通常的策略是通过将文件的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
设置为{一个不再是生产路径的名称。
剩下的难题是如何确定要在此处使用哪种配色方案。对于上面的示例,我手动创建了Sublime随附的Monokai.sublime-color-scheme
的副本,并修改了background
属性以稍微改变显示的颜色。
或者,您可以选择其他一些配色方案来代替生产,甚至可以即时生成sublime-color-scheme
。
在这种情况下,您可能希望使用sublime.load_resource()
和sublime.decode_value()
将sublime-color-scheme
加载并解码为JSON对象,然后处理颜色并将文件另存为新文件sublime-color-scheme
放入您的User
软件包中。