[X11] Инвертировать цвет окна

dangerr

По работе приходится активно использовать проприетарный софт под названием matlab. Он, вроде как, написан на java с использованием стандартной графической библиотеки swing, но когда я нашёл как заставить java-swing приложения использовать тему gtk и сделал это, matlab всё равно проигнорировал. Гуглил на тему как заставить его следовать gtk-теме, потом пытался найти что-нибудь про собственную поддержку тем. Без толку: можно только менять цвета текстовых полей и расцветки синтаксиса, но не виджетов.
В итоге решил идти методом костылей: просто инвертировать цвета в его окнах. Нашёл xcalib, позволяющий с флагами -i -a инвертировать вообще все цвета, но это, конечно, не подходит. Даже если просто поставить светлую тему и инвертировать вообще всё, я же не хочу картинки и видео видеть инвертированными.
Гуглил на тему инвертирования отдельного окна. Все активно советуют какой-то плагин на compiz. Советующие, очевидно, предполагают, что все пользуются metacity или kwin и разницы при переходе на compiz не заметят. В моём случае это не так. Если для инвертациии отдельного окна нужен композитинг, то он может работать и без композитного оконного менеджера. Во всяком случае, я пробовал запускать вместе с notion отельный композитный менеджер xcompmgr и это работало. Но в его мане я не нашёл опции для инверсии цветов, а так же возможности натравить его только на конкретные окна.
Если кто-то знает прямое решение (заставить matlab использовать тёмную тему), то это ещё лучше, но думаю, что вероятнее получится разобраться с инвертированием, чем настроить проприетарщину.

yroslavasako

у тебя есть три варианта:
0) убгоий композитинг, который не умеет инвертировать цвета
1) разудтый композитинг, который умеет инвертировать цвета и делать ещё кучу ненужных вещей (compiz)
2) DIY композитинг, который умеет инвертировать цвета
Так что если хочешь минимализма, то вперёд - к самописному софту.
compiz как оконный менеджер не так уж и страшен. Ты же не обязан на него гном или кде налепливать

BondarAndrey

По работе приходится активно использовать проприетарный софт под названием matlab.
matlab -nodesktop -nosplash  

А код набирать в emacs. Так я по крайней мере делаю, и мне совершенно посрать на цвет окон у матлаба.

dangerr

0) убгоий композитинг, который не умеет инвертировать цвета
Как это поможет решить мою проблему?
2) DIY композитинг, который умеет инвертировать цвета
Боюсь, это не для меня. Для этого надо начать из далека - с освоения C++, затем только изучние спецификаций Xorg и freedesktop или исходников xcompmgr и xcalib. Несомненно, C++ - вещь полезная в жизни, но мотивация для его изучения "потому что matlab не поддерживает темы" как-то странно выглядит... Надо всё-таки свои ресурсы более рационально использовать, чем тратить уйму времени на горожение костылей вокруг проприетарщины.
1) разудтый композитинг, который умеет инвертировать цвета и делать ещё кучу ненужных вещей (compiz)
compiz как оконный менеджер не так уж и страшен. Ты же не обязан на него гном или кде налепливать
да я совсем не против компиза как такового. Мне даже нравятся некоторые вещи. Например, визуальное переключение ворксейсов в desktop cube позволяет включить пространственное восприятие и делает ориентирование среди воркспейсов более естесственным. Но проблема в том, что не представляется возможным его скрестить с notion или каким-либо другим тайловым менеджером. А пользоваться плавающими, перекрывающимися окнами, без удобного управления с клавиатуры и поддержки скриптования, хуже, чем всего лишь светлые виджеты в одной, пусть и постоянно используемой, программе.

dangerr

matlab -nodesktop -nosplash
Вот это мне уже больше нравится. Набрал такое и появилась интерактивная консоль, где можно набирать команды. Это хорошо... но во-первых, если набрать figure, то всё равно вылезет белое окно для отображения графиков, но это полбеды. Я могу представить, что я буду просто сохранять файлы и запускать их из этой консольки, но как насчёт дебага? Мне хочется бегать по циклам и иметь список переменных и их значений. Так же очень удобно открыть массив как таблицу и проглядеть/поправить что-нибудь.
Как быть с этим?

BondarAndrey

Так же очень удобно открыть массив как таблицу и проглядеть/поправить что-нибудь.
Как быть с этим?
Понятия не имею, не использую подобных средств отладки. Зачем мне отдельное окно с содержимым массива, если его можно вывести на экран просто поставив точку останова (или еще проще, вызвав неопределенную функцию) и напечатав имя массива без завершающей ; (можно писать A(1:10) или там A(:,1 ) если не нужен весь массив)?

yroslavasako

Как это поможет решить мою проблему?
любимый продукт опенсорса: жричтодали. И вряд ли стоит ожидать другого. Попробуй xcompmgr доработать напильником, авось получится
update: и в самом деле допиливай xcompmgr он не сложный, вот тебе годный образец:
http://github.com/chjj/compton/blob/master/src/opengl.c

dangerr

Хорошо, а как поставить точку остановки, если редактируешь в простом текстовом редакторе? Неопределённая функция заставит скрипт упасть с ошибкой и идти по шагам уже не выйдет.
Просмотр переменных в виде таблиц действительно не столь критичный функционал и можно всё сделать из консоли.

BondarAndrey

любимый продукт опенсорса: жричтодали. И вряд ли стоит ожидать другого. Попробуй xcompmgr доработать напильником, авось получится
При чем тут опенсорц? Опенцорс как раз толерантен ко всяким проявлениям гичества. Если тебе хочется сделать матлаб чорным или там скрестить тайловый менеджер с компизом — никто не запрещает тебе делать это, есть все возможности, как-то: а) может кто-то уже это написал, б) можно попробовать попросить автора сделать нужное тебе в) можно, наконец, запилить это самому.
Но важно понять, что быть гиком — это значит иметь яйца, т.е. не просто кривить губу и хотеть странного, но и быть готовым, если понадобится, сделать это самостоятельно. Иначе ты не гик, а обычный инфантил и мудак, который нетрадиционностью своих запросов пытается выделиться, а еще ноет, когда ему навстречу никто не идет.

BondarAndrey

Хорошо, а как поставить точку остановки, если редактируешь в простом текстовом редакторе?
Емакс, кажись, умеет отправлять скрипт на исполнение построчно или выделенным блоком, насчет "простых текстовых редакторов" — не в курсе, с этим тебе придется разбираться самому.

dangerr

любимый продукт опенсорса
Щито? :shocked:
Это в опенсорсе-то "жри, что дали"?. Если что, то у меня проблемы как раз из-за проприетарщины, в которой это "жри, что дали" доведено до полного абсурда, когда даже тему нельзя применить. А в опенсорсе всегда есть выбор. Может не такой богатый, многое ещё не сделано, что-то мало кому нужно. Вообще, инвертация одного окна - это, как-никак, костыль и ясно, что его никто не сделал. Разработчики опенсорса недолюбливают костыли.
update: и в самом деле допиливай xcompmgr он не сложный, вот тебе годный образец:
http://github.com/chjj/compton/blob/master/src/opengl.c
Когда будет время и я осилю Страуструпа, то я бы с большим удовольствием прикрутил композитинг к notion. Но сейчас я всё-таки хочу поступить с учётом принципа Парето. Моя цель - научная публикация, которая войдёт в мой PhD thesis, а не композитинг для matlab.

BondarAndrey

Вообще, я с матлабом работаю так: код пишу и отлаживаю в emacs и octave, причем стараюсь придерживаться диалекта совместимого с матлабом (кроме строковых констант). Затем, если мне нужна реальная производительность, запускаю матлаб удаленно на рабочей станции (локалько у меня матлаба вообще нет, т.к. лаптом 32-битный, а матлаб с недавнего времени только по 64 бит) предварительно сконвертировав его вот таким скриптом
#!/bin/bash

if [ -z $1 ]; then
echo "Convert octave source code into Matlab-compatible"
echo "Usage: $0 file"
exit 0
fi

# Always create a backup file
if [ ! -f "$1.bak" ]; then
cp "$1" "$1.bak"
else
echo "Backup file already exists!"
exit 1
fi

# 1. Convert octave-specific comments
sed -i "s/#/%/g" $1

# 2. Convert octave string separators
sed -i "s/\"/\'/g" $1

# 3. Convert `printf' into `fprintf'
sed -i "s/[^fs]printf/fprintf/g" $1

exit $?

yroslavasako

тогда перестань ебать мозг. Пусть твои глаза пострадают ради публикации.
И это как раз в опенсорсе нет альтернатив. А в закрытых были бы деньги - удобные программы найдутся. Так что если тебе принципиально жалко глаза: http://www.wikihow.com/Invert-Colors-on-Windows-7

dangerr

о, я вот что нашёл
http://matlab-emacs.sourceforge.net/
Правда нифига официальной документации нет :(
А emacs я давно хотел пощупать по-ближе, так как eclipse мне с каждым разом всё меньше и меньше нравится. Пожалуй, пойду по этому пути :)

BondarAndrey

И это как раз в опенсорсе нет альтернатив. А в закрытых были бы деньги - удобные программы найдутся. Так что если тебе принципиально жалко глаза: http://www.wikihow.com/Invert-Colors-on-Windows-7
Да ты, оказывается, латентный проприераст!
Кто тебе мешает предложить деньги опенсорцному разрабу? Я вот однажды так поступил: предложил заплатить разработчику за потрирование нужной мне программы на нужный мне дистрибутив. Знаешь, что мне сказал разработчик? Он сказал, что еще никто никогда не заикался об оплате его труда — и сделал бесплатно. Думаю, ты сможешь сделать правильные выводы.

dangerr

Так что если тебе принципиально жалко глаза: http://www.wikihow.com/Invert-Colors-on-Windows-7
Ты меня поражаешь... уже винду начал советовать.
И чем решение по ссылке для винды отличается от полной инвертации всего через xcalib -i -a в иксах?

BondarAndrey

http://matlab-emacs.sourceforge.net/
Правда нифига официальной документации нет :(
По-моему, это говно. Я смотрел, но не впечатлился, может тебе больше повезет. Я использую octave-mode для emacs, хотя он конфьюзится чисто матлабовым кодом — из-за этого приходится писать как для октавы, а потом конвертировать.

dangerr

По-моему, это говно. Я смотрел, но не впечатлился, может тебе больше повезет. Я использую octave-mode для emacs, хотя он конфьюзится чисто матлабовым кодом — из-за этого приходится писать как для октавы, а потом конвертировать.
Ну это фигово. У нас принят стандарт в виде матлаба, в идеале должна быть общая, используемая всей научной группой, библиотека (пока правда нет), так что хотелось бы писать под матлаб, а не октаву. Иначе нужно будет всех убеждать, что им нужно писать код, совместимый с октавой. Народ не поймёт.

BondarAndrey

Иначе нужно будет всех убеждать, что им нужно писать код, совместимый с октавой. Народ не поймёт.
Не понял логики. Пиши сам для октавы, а остальным давай полностью совместимый с матлабом код, в чем проблема?

dangerr

В идеале в моём представлении у нас должна быть общая бибилиотека часто используемых функций, в которую будут делать вклад все члены группы. Если она не будет совместима с октавой, то я с ней не смогу работать. А никто, кроме меня, этим заморачиваться не будет.

yroslavasako

Ты меня поражаешь... уже винду начал советовать.
ну так если тебе действительно нужно, можешь заплатить за винду. Запустить её в виртуальной машине и применить к ней указанную процедуру. Можешь попробовать найти разработчиков композита и заплатить им.

dangerr

С таким же успехом я могу поставить и gnu/linux в виртуальную машину и там запихнуть xcalib -i -a в .xinitrc
Винда ради винды?

vall

ещё можно запустить какой-нить специально подпаченный Хефир а в нём уже матлаб

dangerr

специально подпаченный Хефир
Что это?

beluchy

Хорошо, а как поставить точку остановки, если редактируешь в простом текстовом редакторе?
может так: http://www.mathworks.com/help/matlab/ref/dbstop.html
ГУЙ == ЗЛО!

vall

Что это?
xephyr или xnest

yroslavasako

подпаченный Хефир
там нет 3d ускорения и композитинг будет софтварный

dangerr

может так: http://www.mathworks.com/help/matlab/ref/dbstop.html
Отлично! Прямо то, что надо!
Осталось разобраться как по команде edit открывать другой текстовый редактор, а по команде doc - системный браузер. :)
ГУЙ == ЗЛО!
Гуй - не зло. Просто сделать нормальный гуй очень сложно. Да ещё к тому же почему-то считается, что если пишем гуи - то оринтируемся на пользователя-идиота.

dangerr

там нет 3d ускорения и композитинг будет софтварный
Зачем мне 3d-ускорение и композитинг?
Вот CUDA может понадобиться...

dangerr

xephyr или xnest
Мне попадалось кое-что по этому поводу пока гуглил:
http://stackoverflow.com/questions/11502519/invert-colors-of...
Так что как минимум со вторым так, похоже, не сработает.

procenkotanya

Вот ещё легковесный подход без композитинга: забабахать LD_PRELOAD модуль, форсирующий все X Visual Class'ы окон в TrueColor и ставящий им инвертированную gamma-ramp'у (правда если они там используют indexed colormaps, то надо будет ещё эти колормапы подкручивать).
Compton умеет инвертировать окна, так что там ничего не нужно патчить, просто поставить, разобраться и настроить.

dangerr

Попробовал разные стили поприменять как там написано. Никакой разницы не заметил, в том числе после перезапуска матлаба. Может с новыми версиями не работает (статья 10 года).
2моноид:
Compton попробую, спасибо.
Оставить комментарий
Имя или ник:
Комментарий: