Поскольку sublime-build
просто выполняет внешний процесс, один из способов сделать это - заставить сборку выполнить внешний инструмент (или файл сценария или пакетного файла и т. Д. c), который отслеживает время и убивает себя .
Второй способ сделать это из Sublime - использовать пользовательскую цель сборки. Это команда, предоставляемая через плагин, который вы указываете Sublime использовать вместо команды, которую он обычно использует для выполнения сборки.
Ниже приведен пример плагина, который делает что-то вроде этого. Посмотрите это видео на , как использовать плагины , если вы не знакомы с использованием пользовательского плагина в Sublime:
import sublime
import sublime_plugin
from Default.exec import ExecCommand
class TimeoutExecCommand(ExecCommand):
"""
Drop in replacement for the exec command in Sublime Text build 3210/3211.
"""
def run(self, **kwargs):
self.timeout = kwargs.pop("timeout", 0)
super().run(**kwargs)
if self.timeout:
sublime.set_timeout(self.time_out_build, self.timeout * 1000)
def time_out_build(self):
if self.proc:
self.append_string(self.proc, "[Timeout exceeded: %.1f]" % self.timeout)
self.proc.kill()
self.proc = None
. В нем реализована новая команда timeout_exec
, которая может использоваться в сборках. иметь их время ожидания, если они не завершены в течение определенного c периода времени. Как отмечено в комментарии, требуется одна из более поздних сборок Sublime Text 3 (она не будет работать в сборках 4xxx, поскольку в этих сборках имеется расширенная команда exec
).
Чтобы использовать это, вам необходимо добавьте несколько дополнительных ключей в ваш файл sublime-build
. Пример файла сборки, который использует это:
{
"target": "timeout_exec",
"cancel": {"kill": true},
"timeout": 4,
"shell_cmd": "echo \"Start\" && sleep 10 && echo \"Done\""
}
Клавиша target
говорит Sublime использовать эту новую команду вместо команды по умолчанию exec
, а клавиша cancel
сообщает Sublime, какие дополнительные аргументы для предоставления, если вы пытаетесь отменить сборку вручную (то есть из меню, палитры команд и т. д. c).
Команда также реализует новый параметр сборки timeout
, то есть время в секундах. после чего сборка отменит сама. Если сборка все еще выполняется при достижении тайм-аута, она отменит:
Start
[Timeout exceeded: 4.0]
Если оставить поле timeout
или установить его значение на 0
, отключится тайм-аут, и в этом случае команда ведет себя точно так же, как обычно.