Проверка источника (vte и gnome-терминал), похоже, что сделать это невозможно. Другие терминалы (например, xterm) могут делать это с помощью escape-последовательностей. См. Управляющие последовательности XTerm :
OSC Ps ; Pt ST
Set Text Parameters. For colors and font, if Pt is a "?", the
control sequence elicits a response which consists of the con-
trol sequence which would set the corresponding value. The
dtterm control sequences allow you to determine the icon name
and window title.
...
Ps = 5 0 -> Set Font to Pt. These controls may be disabled
using the allowFontOps resource. If Pt begins with a "#",
index in the font menu, relative (if the next character is a
plus or minus sign) or absolute. A number is expected but not
required after the sign (the default is the current entry for
relative, zero for absolute indexing).
vte распознает 50
, но это (как и многие другие функции xterm) это просто заглушка, которая ничего не делает. Источники xterm включают 20-летний сценарий , который демонстрирует эту особенность (см. fonts.sh
).
Вместо использования escape-последовательности вы можете использовать инструмент wmctrl
(который может попросить оконного менеджера договориться с терминалом). Некоторые сделали это с другими терминалами, например, с терминологией (но в конечном итоге с помощью escape-последовательности).
vte имеет некоторый код, который может быть доступен из скрипта Python, используя g_signal_connect
, чтобы связать сигнал decrease-font-size
и increase-font-size
(см. исходный код ). Сигнальный код - это то, что вы используете с клавиатурой. Но как вы можете определить указатель на объект из скрипта, запускаемого вне эмулятора терминала, не ясно.
Оказывается, что проблема состояла в том, что мои контроллеры снова использовались между вызовами. Одна из деталей, которые я принял решение опустить из своего исходного сообщения, - то, что я использую Замок. Виндзорский контейнер для создания моих контроллеров. Мне не удалось отметить мой контроллер с Переходным образом жизни, таким образом, я возвращал тот же экземпляр по каждому запросу. Таким образом контекст, используемый редактором связей, снова использовался, и конечно он содержал устаревшие данные.
Я обнаружил проблему, тщательно анализируя различие между кодом Eilon и моим, устранив все другие возможности. Как в документации Замка говорится, это - "ужасная ошибка"! Позвольте этому быть предупреждением другим!
Спасибо за Ваш ответ Eilon - извините, что заняли Ваше время.
Я не уверен, связано ли это или нет, но Ваш вызов к <% = HTML. TextBox ("newRunTime. Время", ViewData. Модель. Время) %> мог бы на самом деле выбрать неправильную перегрузку (так как Время является целым числом, она выберет object htmlAttributes
перегрузка, а не string value
.
Проверка представленного HTML сообщит, происходит ли это. изменение интервала к ViewData.Model.Time.ToString()
вызовет корректную перегрузку.
Это кажется, что Ваша проблема - что-то другое, но я заметил, что и были записаны в прошлом.
Я пытался воспроизвести эту проблему, но я не вижу того же самого поведения. Я создал почти точно тот же контроллер и представления, что Вы имеете (с некоторыми предположениями) и каждый раз, когда я создал новое "Время выполнения", я поместил его значение в TempData и отослал его посредством Перенаправления. Затем на целевой странице я захватил значение, и это всегда было значение, которое я ввел по тому запросу - никогда устаревшее значение.
Вот мой Контроллер:
общедоступный класс HomeController: Контроллер {общедоступный Индекс ActionResult () {ViewData ["Заголовок"] = "Домашняя страница"; представьте сообщение в виде строки = "Приветствие": + TempData ["сообщение"]; если (TempData. ContainsKey ("значение")) {интервал theValue = (международный) TempData ["значение"]; обменивайтесь сообщениями + = "" + theValue. ToString ();} ViewData ["сообщение"] = сообщение; возвратите Представление ();}
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Create() {
return View(RunTime.Default);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(RunTime newRunTime) {
if (ModelState.IsValid) {
//service.CreateNewRun(newRunTime);
TempData["Message"] = "New run created";
TempData["value"] = newRunTime.TheValue;
return RedirectToAction("index");
}
return View(newRunTime);
}
}
И вот мое Представление (Create.aspx):
<% using (Html.BeginForm()) { %>
<%= Html.TextBox("newRunTime.TheValue", ViewData.Model.TheValue) %>
<input type="submit" value="Save" />
<% } %>
Кроме того, я не был уверен, на что был похож тип "Во время выполнения", таким образом, я сделал этого:
public class RunTime {
public static readonly RunTime Default = new RunTime(-1);
public RunTime() {
}
public RunTime(int theValue) {
TheValue = theValue;
}
public int TheValue {
get;
set;
}
}
Действительно ли возможно, что Ваша реализация RunTime включает некоторые статические значения или что-то?
Спасибо,
Eilon
Столкнувшись с подобными проблемами при попытке использовать контейнер МОК Виндзора в приложении MVC ASP.NET я должен был пройти то же путешествие исследования для получения его работа. Вот некоторые детали, которые могли бы помочь кому-то еще.
Используя это начальная настройка в Global.asax:
if (_container == null)
{
_container = new WindsorContainer("config/castle.config");
ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(Container));
}
И использование WindsorControllerFactory, который при просьбе относительно экземпляра контроллера делает:
return (IController)_container.Resolve(controllerType);
Пока Виндзор правильно соединял все контроллеры, по некоторым причинам параметры не передавались от формы до соответствующего действия контроллера. Вместо этого они были всем пустым указателем, хотя он называл корректное действие.
Значение по умолчанию - чтобы контейнер пасовал назад одиночные элементы, очевидно, плохая вещь для контроллеров и причины проблемы:
http://www.castleproject.org/monorail/documentation/trunk/integration/windsor.html
Однако документация действительно указывает, что образ жизни контроллеров может быть изменен на переходный процесс, хотя это на самом деле не говорит Вам, как сделать это, если Вы используете конфигурационный файл. Оказывается, что это достаточно легко:
<component
id="home.controller"
type="DoYourStuff.Controllers.HomeController, DoYourStuff"
lifestyle="transient" />
И без любых изменений кода это должно теперь работать как ожидалось (т.е. уникальные контроллеры каждый раз, обеспеченный одним экземпляром контейнера). Можно затем реализовать всю конфигурацию МОК в файле конфигурации, а не коде как хороший мальчик/девочка, что я знаю, что Вы.
Seb, я не уверен, что Вы подразумеваете под примером. Я ничего не знаю о конфигурации Единицы. Я объясню ситуацию с Замком. Виндзор и возможно который поможет Вам с настроить Единицу правильно.
По умолчанию, Замок. Виндзор возвращает тот же объект каждый раз, когда Вы запрашиваете данный тип. Это - одноэлементный образ жизни. Существует хорошее объяснение различных опций образа жизни в Замке. Виндзорская документация.
В ASP.NET MVC каждый экземпляр класса контроллера связывается с контекстом веб-запроса, которому он был создан для обслуживания. Таким образом, если Ваш контейнер МОК возвратит тот же экземпляр Вашего класса контроллера каждый раз, то когда Вы будете всегда связывать контроллер с контекстом первого веб-запроса, который использовал тот класс контроллера. В частности, ModelState
и другие объекты, используемые DefaultModelBinder
будет снова использован, таким образом, Ваш связанный объект модели и сообщения проверки в ModelState
будет устаревшим.
Поэтому Вам нужен Ваш МОК для возврата нового экземпляра каждый раз, когда MVC запрашивает экземпляр класса контроллера.
В Замке. Виндзор, это называют переходным образом жизни. Для конфигурирования его у Вас есть две опции:
Я предположил бы, что Единица предлагает подобное понятие образу жизни в Замке. Виндзор, таким образом, необходимо будет настроить Единицу для использования ее эквивалента переходного образа жизни для контроллеров. MvcContrib, кажется, имеет некоторую поддержку Единицы - возможно, Вы могли посмотреть там.
Надеюсь, это поможет.