Несколько сообщений о МАТЛАБ и о том, как им пользоваться.
Комментарии, критика и восторженное рукоплескание приветствуются в самой категоричной форме.
Комментарии, критика и восторженное рукоплескание приветствуются в самой категоричной форме.
Изменение цветов командного окна MATLAB
Запись от letete размещена 23.06.2014 в 17:25
Показов 14700
Комментарии 0
Метки matlab, undocumented, марафет
|
Подборка статей г-на Альтмана на тему разукрашивания командного окна МАТЛАБ. Перевод вольный, сохраняющий лишь суть проблемы, опробованный и дополненный. Отсылка к оригиналам: original part 1, original part 2, original part 3. Часть 1. Изменение цветов (фона и шрифта) в командном окне МАТЛАБ возможно из меню File->Preferences, но, очевидно, требует действий пользователя. Представляет интерес другой вопрос: можно ли делать это программно (например, записать нужную последовательность команд в некоторый скрипт-файл "startup.m"). Такое может понадобиться, например, при работе над двумя приложениями одновременно (МАТЛАБ запущен дважды), когда хотелось бы визуально отличать вывод одного от другого. Программное изменение командного окна может быть сделано двумя способами: внести изменения в системные настройки (здесь ссылку добавлю позже) или задать настройки для текущей сессии. Собственно, по поводу цветов:
Это повлияет на все текстовые панели МАТЛАБ (командное окно – Command window, окно истории – Command History, обозреватель рабочей области – Workspace и т.д.) сразу и на все будущие сессии МАТЛАБ. Если же Вы хотите установить цвета только в командном окне и больше нигде, или хотите изменить лишь текущую сессию, то забудьте про способ изменения настроек. Вместо этого используйте следующий короткий фрагмент кода (возможно, потребуется настроить его для конкретных версий МАТЛАБ).
Замечание: безопаснее было бы пройтись по массиву listeners, т.к. нет уверенности, что в вашей версии jTextArea будет находиться на третьем месте в массиве. Не по теме: <! не актуально>
В версии МАТЛАБ 2014а предложенная конструкция уже не сработает (тупо не доступно поле 'Type'), однако всегда можно найти альтернативное решение проблемы! В МАТЛАБ 2014а jTextArea находится уже на пятом месте (во всяком случае, у меня) и вот еще один не хитрый способ выделить нужный элемент из массива:
Часть 2. Такой вопрос: а можно ли для команд dist или fprintf установить конкретные цвета вывода на раз? Короткий и простой ответ: нет. Вы можете изменить цвет текста, как описано выше, но как только Вы это сделаете, весь текст командного окна будет изменен соответствующим образом. К сожалению, командное окно (т.к. является стандартным экземпляром свинга JTextArea) автоматически не поддерживает HTML-форматирование, как большинство элементов управления (см. использование HTML-форматирования). В действительности, командное окно есть объект Document, который хранит весь текст (вместе с информацией о стиле шрифта); он является расширением свинга javax.swing.text.PlainDocument, который не позволяет какого-либо форматирования текста. Да и сам объект «командное окно» является всего лишь простым JTextArea, который не позволяет использовать стилизированные объекты Document. Возможно, в будущих версиях MathWorks могут включить практически идентичный JTextPane, который поддерживает стилизированный текст. В очень ограниченной степени, Вы можете использовать тот факт, что гиперссылки и сообщения об ошибках имеют отличные от стандартного стили (соответственно, синий подчеркнутый и красный). Таким образом, Вы можете выводить в этих стилях:
my text
my textПримечание. Можно получить хэндл JTextArea (см. Displaying hidden handle properties - тоже расскажу об этом когда время найдется) и установить его свойство UI на свой специально созданный UI-класс. В этом классе можно установить свойства текста посегментно так, как Вы хотите. Это, по-видимому, то, как МАТЛАБ преодолел ограничения JTextPane: они реализовали пользовательский класс com.mathworks.mde.cmdwin.CmdWinSyntaxUI, который расширяет javax.swing.plaf.basic.BasicTextAreaUI. Но реализация такого класса для пользовательского интерфейса, сохраняя при этом функциональность подсветки синтаксиса МАТЛАБ, скорее всего, довольно сложна и не стоит усилий. Так что мы можем лишь ожидать некоторого метода, который бы в будущем выпуске МАТЛАБ поддерживал бы подобного рода функции. Часть 3 (cprintf – отображение текста с цветовым форматированием). После долгих мучений и мытарств мне (Yair Altman) удалось справиться с проблемой цветного вывода в командное окно. Результатом стала функция cprintf, которую можно скачать с портала MATLAB Central File Exchange. (Дополнение. Этот файл проще всего сохранить в одну из стандартных директорий МАТЛАБ, для того чтобы система воспринимала функцию cprintf как одну из встроенных. Воспользуйтесь командой path: увидите список стандартных директорий, среди которых есть что-то вроде C:\Users\<UserName>\Documents\MATLAB - я обычно все такое сохраняю сюда.) Для начала, вот результат: cprintf опирается на идеи, описанные в предыдущих частях. Поскольку командное окно является JTextArea, что не позволяет задавать стиль посегментно, крайне любопытно понять, как МАТЛАБ способен отображать подсветку синтаксиса в нем. Вероятно, так сделано с помощью выделенного класса UI (com.mathworks.mde.cmdwin.CmdWinSyntaxUI ), как было предположено во второй части. Это внутренний класс Matlab Java, поэтому мы не можем изменить его. Казалось бы, что это тупик! Но лишь на некоторое время... (продолжение следует!) | |||||||||||||||||||||||||||||||||||
Метки matlab, undocumented, марафет
Размещено в МАТЛАБ
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии


