У меня есть эта простая команда, которая изменяет значение myBoolSetting
:Как изменить параметр в команде и сохранить другие изменения сеанса?
commands += Command("mycommand") {
state ⇒ (Space ~> Bool).?
} { (state, arg) ⇒
val b = arg.getOrElse(true)
Project.extract(state).append(Seq(myBoolSetting in Global := b), state)
}
Когда я изменяю вызвать это изменить myBoolSetting
но я теряю любую установку, значение которой было изменено с помощью set command
.
> set myStringSetting := "new value"
> myCommand false
В этом примере значение myStringSetting
было потеряно, и имеет свое значение по умолчанию.
Как изменить настройку и сохранить измененные вручную настройки?
UPDATE:
Найдено связанный с этим вопрос: Why sbt.Extracted remove the previously defined TaskKey while append method?, но, кажется, не работает в моем случае.
Модифицированный код:
commands += Command("mycommand") {
state ⇒ (Space ~> Bool).?
} { (state, arg) ⇒
val b = arg.getOrElse(true)
val session = Project.session(state)
val state2 = Project.extract(state).append(Seq(myBoolSetting in Global := b), state)
SessionSettings.reapply(session, state2)
}
Этот ответ является частичным, но дает ключ. Благодарю. –
Рад, что это помогло. Почему вы не просто 'session save' перед вызовом команды? По замыслу, как только сеанс будет сброшен, все временные значения тоже будут. –
Моя цель - постепенно изменять настройки сеанса. –